Ich dachte nur, ich sollte den Code, den ich mir vorgestellt habe, besser mitteilen. Obwohl ich kein bash-Programmierer bin, gibt es eine Menge Wissen über Google, daher glaube ich, dass dieser Code die Arbeit für mich erledigen wird. Grundsätzlich ist es:
- Durchlaufen Sie alle Dateien und Ordner am neuen Speicherort und für jede:
- Prüfen Sie, ob am alten Speicherort dieselbe Datei vorhanden ist
- Wenn nein, schreibe einen Protokolleintrag
- Wenn ja, stimmt der Zeitstempel (Änderungsdatum) überein?
- Ja - nichts als einen Protokolleintrag schreiben
- Nein, die Zeitstempel stimmen nicht überein
- Ist es entweder ein Verzeichnis oder ist der Inhalt der Datei identisch? Setzen Sie dann den Zeitstempel auf den Zeitstempel der Datei am alten Speicherort zurück und schreiben Sie einen Protokolleintrag
- Wenn sich der Dateiinhalt unterscheidet, können die Zeitstempel ebenfalls funktionieren. Schreiben Sie einfach einen Protokolleintrag.
- Prüfen Sie, ob am alten Speicherort dieselbe Datei vorhanden ist
Code:
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;
Kommentare zum Code sind willkommen.