Tar-Äquivalent zu zip -o (--latest-time)?

Tar-Äquivalent zu zip -o (--latest-time)?

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 -rOption (Referenz) vontouch. Eigentlich benutze ich das auch nicht, sondern stattdessen ein Dienstprogramm (cpd).

verwandte Informationen