tarがファイル/ディレクトリの最後の変更時刻を無視するようにする方法

tarがファイル/ディレクトリの最後の変更時刻を無視するようにする方法

ディレクトリのバックアップに使用しますtar。一部のファイル/ディレクトリはlast-modified-time更新されますが、内容はそのまま残ります。カタログファイルの内容が変更されていない場合は、バイナリファイルを含むtarballを取得したいと思います。

ただし、last-modified-time更新されるたびに、結果のtarballのバイナリは異なります。

tar無視する方法はありますかlast-modified-time?これにより、内容が変更されない限り、同じバイナリを取得できます。

ベストアンサー1

TARで固定のmtimeを探しているだけでなく、ファイル自体が同じであれば、ビット単位で同じtarballを探しているようです。これは実際に人々が考えるよりも複雑です。

お客様の状況によっては、すべてが関連しているわけではありませんが、完全性のためにここに記載します。 GNU tarでは、次のことができます。

  • でmtimeを設定します--mtime=<date>。バージョン1.29(Debian 1.28-1)以降、--clamp-mtime指定されたmtimeよりも最新/最新のファイルにのみファイルの実際のmtimeを設定できます。生成されたファイルに共通のタイムスタンプを提供しますが、ファイルを保持するには有用)他のファイルを分離してください。
  • アーカイブで予測可能なファイルの順序を使用します--sort=name(GNU tar 1.28以降)。デフォルトの動作は、--sort=noneファイルをディレクトリ順に保存することです。
  • --owner=0 --group=0 --numeric-owner所有者を設定します(他のユーザーからTARを作成する場合)。
  • 他のumaskによって権限が異なる場合があります。chmodアーカイブを作成する前に使用したり、--mode=<CHANGES>一貫性を保つために使用します。

繰り返し可能なビルドプランではビットごとに同じアーカイブを生成するための良い記事

この資料では、他のTAR実装にも適用できる古いtarバージョンのいくつかの回避策も提供します。 mtimeの具体的な回避策は、touchそれを使用してTARを生成する前に、特定の日付より前のすべてのファイルに対してmtimeを固定値に設定できることです。アーカイブから予測可能な順序を取得するには、順序付きファイルのリストを使用してTARに渡しますfindsort

find build -print0 | LC_ALL=C sort -z
  | tar --no-recursion --null -T - -cf product.tar

よりGNU TARドキュメント各オプションに関する情報を含むマンページ。

おすすめ記事