Я просто подумал, что лучше поделиться кодом, который я придумал. Несмотря на то, что я не являюсь программистом 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;
Любые комментарии к коду приветствуются.