나는 내가 생각해 낸 코드를 더 잘 공유 할 것이라고 생각했다. bash 프로그래머가 아니지만 Google을 통해 많은 지식을 얻을 수 있으므로이 코드는 저에게 도움이 될 것입니다. 기본적으로 다음과 같습니다.
- 새 위치의 모든 파일과 폴더를 반복하고 각각에 대해 반복합니다.
- 이전 위치에 동일한 파일이 있는지 확인하십시오.
- 아니요 인 경우 로그 항목을 작성하십시오.
- 그렇다면 타임 스탬프 (수정 날짜)가 일치합니까?
- 예 - 할 일이 없지만 로그 항목 작성
- 아니요, 타임 스탬프가 일치하지 않습니다.
- 파일이 디렉토리입니까 아니면 파일 내용입니까? 그런 다음 타임 스탬프를 이전 위치에있는 파일의 타임 스탬프로 재설정하고 로그 항목을 작성하십시오
- 파일 내용이 다른 경우 시간 소인도 가능합니다. 로그 항목을 작성하십시오.
암호:
shopt -s globstar
NEWDIR="/home/jon"
OLDDIR="/tmp/jon_old"
LOGFILE=restoreDates_$(date "+%Y-%m-%d-%H%M%S").log
echo $LOGFILE > $LOGFILE
for f in "$NEWDIR"/** ; do
OLDFILE=$(sed -e "s/$NEWDIR/$OLDDIR/" <<< $f)
# Does corresponding file exist in old directory?
if [ -a "$OLDFILE" ] ; then
# Do both files have the same modify date?
if [ $(stat -c %Y "$f") -eq $(stat -c %Y "$OLDFILE") ] ; then
echo "$OLDFILE already has same modify date/time as $f" >> $LOGFILE
else
# Is this a directory?
if [ -d "$f" ]; then
echo "$f is a directory, modify timestamp will be reset to that of $OLDFILE; $(stat -c %y "$OLDFILE")" >> $LOGFILE
touch -r "$OLDFILE" "$f"
else
# Not a directory - Is old file equal to the new?
if $(cmp --silent "$f" "$OLDFILE"); then
# yes
echo "$OLDFILE and $f are identic, modify timestamp will be reset to $(stat -c %y "$OLDFILE")" >> $LOGFILE
touch -r "$OLDFILE" "$f"
else # File has changed
echo "$OLDFILE differs from $f , which must have changed" >> $LOGFILE
fi
fi
fi
else # File does not exist in old directory
echo "$OLDFILE does not exist (but $f do)" >> $LOGFILE
fi
done;
코드에 대한 모든 의견은 환영합니다.
touch -m
(해당 날짜 시간 설정) NAS 파일. 해킹이 될 수는 있지만 작동한다고 생각합니다.