zip -o(--latest-time)と同等のtar?

zip -o(--latest-time)と同等のtar?

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

あなたは変わらなければなりませんfoo.tar.gz目次/上記のコマンドで

それ

  • すべてのファイルを検索目次/(タールと同じ)
  • エポック以降に最後に変更されたタイムスタンプを秒単位で取得します。
  • 数字でソートし、最も低いもの(最新)を取得します。
  • touchはfoo.tar.gzタイムスタンプを調整するときにこのファイルを参照として使用します。

答え2

(少なくともPOSIXでは)行がない可能性があります。私はスクリプト(ディレクトリをタッチ)は、ディレクトリ内のファイルの最新のタイムスタンプと一致するようにディレクトリタイムスタンプを設定し、結果のアーカイブに対応するタイムスタンプを使用します。

最後の手順は-r(参照)オプションを使用して実行できます。touch。実際、私はこの機能を使わずに代わりにユーティリティ(cpd)。

関連情報