私はただ(今日は31-jan-2019
)ランダムなsource.tar.gzをダウンロードして抽出しました。結果のフォルダでstat
を実行すると、次のように表示されます。
Access: 2019-01-31 10:37:26.308991485 +0100
Modify: 2018-11-18 00:02:35.000000000 +0100
Change: 2019-01-31 10:36:03.881185889 +0100
Birth: -
変更日は過去で、ラップトップを持っていた前です。このタイムスタンプがどのように役立つかを誰かが説明できますか?
これは非常に直感的ではなく、すべての時間(変更/アクセス/変更)がファイルシステムの存続期間内に制限されることを期待しています。 (また、最も有用な日付の1つ、つまり特定のファイル/フォルダーが最初に表示された時刻はありませんが、ext4では出生は空です)で取得できることはわかっています。)
私はこの答えをGNU tar
、そのために マニュアルはここにあります に基づいています。
tar
は、アーカイブが作成されたときのファイルの変更時刻を保持します。これにより、tar
はファイルのタイムスタンプに依存する特定の操作を実行できます。
-u
、--update
アーカイブ内の対応するコピーよりも新しいファイルを追加します。
マニュアルから:
--update
操作は、指定されたアーカイブメンバーの日付を同じ名前のファイルの日付と比較することにより、tarアーカイブを更新します。ファイルがアーカイブメンバーよりも最近変更された場合は、ファイルの新しいバージョンがアーカイブに追加されます(--append
と同様)。
更新操作により、実際にはファイルが上書きされるのではなく、追加されることに注意してください。これは、歴史的な理由、つまりテープの中央部分への書き込みが難しいためです。
tar
に--keep-newer-files
オプションを使用して保持するように依頼できます。--keep-newer-files
アーカイブコピーよりも新しい既存のファイルを置き換えないでください。
tar
アーカイブは当初、ファイルを磁気テープに便利に保存するために使用されていました。長期保存の観点から、tar
アーカイブは、特定の時点での一連のファイルの状態を表すことができます。論理的には、これにはそのアーカイブのコンテンツのタイムスタンプを含める必要があります。変更タイムスタンプは、atime(ファイルを読み取ると変更される)またはctime(tarが抽出されたファイルのメタデータを「修正」するときに変更される可能性がある)とは対照的に、ファイルの内容がいつ変更されたかの信頼できる尺度です。
変更時刻はアーカイブ内に存在するため、-d
/--diff
オプションを使用して、その情報を既存のファイルシステム上のファイルと比較することもできます。
--compare
(-d
)、または--diff
操作は、指定されたアーカイブメンバーを同じ名前のファイルと比較し、ファイルサイズ、モード、所有者、変更日、および内容の違いを報告します。
最後に、アーカイブを抽出するときに変更タイムスタンプを本当に無視する必要がある場合は、-m
/--touch
オプションで次のことができます。
-m
、--touch
データ変更時間を抽出しないでください。このオプションを使用すると、tarは、アーカイブに記録された時間に設定するのではなく、抽出したファイルのデータ変更時間をファイルが抽出された時間として残します。
GNU tar
を使用すると、アーカイブの内容を抽出して、変更時刻を現在の日付/時刻に設定できます。
tar --touch -xvf source.tar.gz
これにより、求めていることを達成できるはずです。
デフォルトの動作がデフォルトです。ファイルのmtime
は、ファイルの送信元や、含まれているファイルシステムの作成場所に関係なく、常に最後の更新のインスタンスに設定する必要があります。 rsync
のようなユーティリティは、サーバーとファイルシステムの間でタイムスタンプを比較する機能に(部分的に)依存しています。