Linux

修改提取文件夾的時間

  • January 31, 2019

我剛剛(今天是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: -

修改日期已經過去,甚至在我還沒有筆記型電腦之前。有人可以解釋這個時間戳是如何有用的嗎?

這是非常不直覺的,我希望所有時間(更改/訪問/修改)都在我的文件系統生命週期內。(也是最有用的日期之一,也就是特定文件/文件夾首次出現的時間,但我知道我可以通過*Birth is empty on ext4*得到它)

我將這個答案基於 GNU tar手冊可在此處獲得

tar創建存檔時保留文件的修改時間。這允許tar執行取決於文件​​時間戳的某些操作。

  1. 第一個用途是“更新”操作:

-u,--update

附加比存檔中相應副本更新的文件。

從手冊:

--update操作通過將指定存檔成員的日期與同名文件的日期進行比較來更新 tar 存檔。如果文件的修改時間比存檔成員的更新時間要晚,則將文件的較新版本添加到存檔中(與 一樣--append)。

請注意,更新操作實際上會導致文件被追加,而不是被覆蓋。這是由於歷史原因,即難以寫入磁帶的中間部分。

  1. 第二個用途是在磁碟上已經存在的文件上提取存檔時。如果現有文件較新,您可以tar通過以下選項要求保留它--keep-newer-files

–keep-newer-files

不要替換比其存檔副本更新的現有文件。

  1. tar檔案最初用於在磁帶上方便地儲存文件。從長期儲存的角度來看,tar檔案可以代表一組文件在特定時間點的狀態。從邏輯上講,這應該包括該存檔內容的時間戳。修改時間戳是文件內容何時被修改的可靠度量,而不是 atime(如果您讀取文件,則會更改)或 ctime(當 tar“修復”提取文件上的任何元數據時會更改)。
  2. -d因為修改時間存在於存檔中,您還可以使用/--diff選項將該資訊與現有文件系統上的文件進行比較:

( ) or操作將指定的存檔成員與同名文件進行比較,然後報告文件大小、模式、所有者、修改日期和內容的差異--compare-d``--diff

最後,如果你真的需要在提取檔案時忽略修改時間戳,-m/--touch選項可以做到這一點:

-m,--touch

不提取數據修改時間。使用此選項時,tar 將其提取的文件的數據修改時間保留為提取文件的時間,而不是將其設置為存檔中記錄的時間。

引用自:https://unix.stackexchange.com/questions/497895