ディレクトリのバックアップに使用します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に渡しますfind
。sort
find build -print0 | LC_ALL=C sort -z
| tar --no-recursion --null -T - -cf product.tar
よりGNU TARドキュメント各オプションに関する情報を含むマンページ。