%3F.png)
Mit dem Zip-Dienstprogramm können wir
Setzen Sie die "letzte Änderungszeit" des Zip-Archivs auf die neueste (älteste) "letzte Änderungszeit", die unter den Einträgen im Zip-Archiv gefunden wurde
mit
zip -o [...]
oder
zip --latest-time [...]
Wie lässt sich das Gleiche mit TAR am einfachsten erreichen?
Antwort1
new_file="$(find dir/ -type f -exec stat --printf='%n\0%Y\n' {} + | sort -k2,2 -nt '\0' | tail -n1 | cut -d '' -f1)"; tar -zcf foo.tar.gz dir/; touch -r "$new_file" foo.tar.gz
Beispiel dafür, was passiert
tar -zcf foo.tar.gz dir/; touch -r fileX foo.tar.gz
Du solltest dich ändernfoo.tar.gz,dir/im obigen Befehl
Es
- findet alle Dateien indir/(dasselbe wie geteert)
- erhält den Zeitstempel der letzten Änderung in Sekunden seit Epoche
- sortiert numerisch und greift sich das unterste (neueste)
- touch verwendet diese Datei als Referenz beim Anpassen des Zeitstempels von foo.tar.gz.
Antwort2
Es gibt wahrscheinlich keinen Einzeiler (jedenfalls in POSIX). Ich verwende ein Skript (Touch-Verzeichnisse), um Verzeichnis-Zeitstempel so festzulegen, dass sie mit dem aktuellsten Zeitstempel der Dateien im Verzeichnis übereinstimmen, und diesen Zeitstempel dann für das resultierende Archiv zu verwenden.
Dieser letzte Schritt kann mit der -r
Option (Referenz) vontouch
. Eigentlich benutze ich das auch nicht, sondern stattdessen ein Dienstprogramm (cpd
).