Eu apenas pensei em compartilhar melhor o código que eu criei. Apesar de não ser um programador bash, há muito conhecimento disponível através do Google, então acredito que este código fará o trabalho para mim. Basicamente o que faz é:
- Faça um loop em todos os arquivos e pastas no novo local e para cada um deles:
- verifique se o mesmo arquivo existe no local antigo
- Se não, escreva uma entrada de log
- Se sim, o carimbo de data / hora (data de modificação) coincide?
- Sim - nada a fazer além de escrever uma entrada de log
- Não, os carimbos de data e hora não correspondem
- É um diretório ou o conteúdo do arquivo é idêntico? Em seguida, reconfigure o registro de data e hora para o registro de data e hora do arquivo no local antigo e grave uma entrada de registro
- Se o conteúdo do arquivo for diferente, os timestamps também poderão funcionar. Basta escrever uma entrada de log.
- verifique se o mesmo arquivo existe no local antigo
Código:
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;
Quaisquer comentários sobre o código são bem-vindos.