tar の zip -o (--latest-time) に相当するものは何ですか?

tar の zip -o (--latest-time) に相当するものは何ですか?

Zipユーティリティを使用すると

zip アーカイブの「最終更新」時刻を、zip アーカイブ内のエントリの中で見つかった最新 (最も古い)「最終更新」時刻に設定します。

zip -o [...]

または

zip --latest-time [...]

TAR で同じことを行う最も簡単な方法は何ですか?

答え1

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

何が起こるかの例

tar -zcf foo.tar.gz dir/; touch -r fileX foo.tar.gz

あなたは変わるべきだtar.gz ファイルディレクトリ/上記のコマンドで

それ

  • すべてのファイルを検索ディレクトリ/(タールを塗られるのと同じ)
  • エポックからの秒数で最終変更タイムスタンプを取得します
  • 数値順に並べ替えて一番下のもの(最新)を取得します
  • touch は、foo.tar.gz のタイムスタンプを調整するときにそのファイルを参照として使用します。

答え2

おそらくワンライナーは存在しない(少なくともPOSIXでは)。私はスクリプト(タッチディレクトリ) を使用すると、ディレクトリのタイムスタンプをディレクトリ内のファイルの最新のタイムスタンプと一致するように設定し、結果のアーカイブにそのタイムスタンプを使用できます。

-r最後のステップは、(参照)オプションを使用して実行できます。touch実際には私もそれを使用せず、代わりにユーティリティ(cpd)。

関連情報