web-dev-qa-db-ja.com

抽出されたフォルダの時間を変更する

私はただ(今日は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では出生は空です)で取得できることはわかっています。

1
dgan

私はこの答えをGNU tar、そのために マニュアルはここにあります に基づいています。

tarは、アーカイブが作成されたときのファイルの変更時刻を保持します。これにより、tarはファイルのタイムスタンプに依存する特定の操作を実行できます。

  1. 最初の使用は、「更新」操作です。

-u--update

アーカイブ内の対応するコピーよりも新しいファイルを追加します。

マニュアルから:

--update操作は、指定されたアーカイブメンバーの日付を同じ名前のファイルの日付と比較することにより、tarアーカイブを更新します。ファイルがアーカイブメンバーよりも最近変更された場合は、ファイルの新しいバージョンがアーカイブに追加されます(--appendと同様)。

更新操作により、実際にはファイルが上書きされるのではなく、追加されることに注意してください。これは、歴史的な理由、つまりテープの中央部分への書き込みが難しいためです。

  1. 2番目の用途は、ディスク上にすでに存在するファイルからアーカイブを抽出する場合です。既存のファイルが新しい場合は、tar--keep-newer-filesオプションを使用して保持するように依頼できます。

--keep-newer-files

アーカイブコピーよりも新しい既存のファイルを置き換えないでください。

  1. tarアーカイブは当初、ファイルを磁気テープに便利に保存するために使用されていました。長期保存の観点から、tarアーカイブは、特定の時点での一連のファイルの状態を表すことができます。論理的には、これにはそのアーカイブのコンテンツのタイムスタンプを含める必要があります。変更タイムスタンプは、atime(ファイルを読み取ると変更される)またはctime(tarが抽出されたファイルのメタデータを「修正」するときに変更される可能性がある)とは対照的に、ファイルの内容がいつ変更されたかの信頼できる尺度です。

  2. 変更時刻はアーカイブ内に存在するため、-d/--diffオプションを使用して、その情報を既存のファイルシステム上のファイルと比較することもできます。

--compare-d)、または--diff操作は、指定されたアーカイブメンバーを同じ名前のファイルと比較し、ファイルサイズ、モード、所有者、変更日、および内容の違いを報告します。

最後に、アーカイブを抽出するときに変更タイムスタンプを本当に無視する必要がある場合は、-m/--touchオプションで次のことができます。

-m--touch

データ変更時間を抽出しないでください。このオプションを使用すると、tarは、アーカイブに記録された時間に設定するのではなく、抽出したファイルのデータ変更時間をファイルが抽出された時間として残します。

1
Haxiel

GNU tarを使用すると、アーカイブの内容を抽出して、変更時刻を現在の日付/時刻に設定できます。

tar --touch -xvf source.tar.gz

これにより、求めていることを達成できるはずです。

デフォルトの動作がデフォルトです。ファイルのmtimeは、ファイルの送信元や、含まれているファイルシステムの作成場所に関係なく、常に最後の更新のインスタンスに設定する必要があります。 rsyncのようなユーティリティは、サーバーとファイルシステムの間でタイムスタンプを比較する機能に(部分的に)依存しています。

0
JRFerguson