Linux
修改提取文件夾的時間
我剛剛(今天是
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
執行取決於文件時間戳的某些操作。
- 第一個用途是“更新”操作:
-u
,--update
附加比存檔中相應副本更新的文件。
從手冊:
該
--update
操作通過將指定存檔成員的日期與同名文件的日期進行比較來更新 tar 存檔。如果文件的修改時間比存檔成員的更新時間要晚,則將文件的較新版本添加到存檔中(與 一樣--append
)。請注意,更新操作實際上會導致文件被追加,而不是被覆蓋。這是由於歷史原因,即難以寫入磁帶的中間部分。
- 第二個用途是在磁碟上已經存在的文件上提取存檔時。如果現有文件較新,您可以
tar
通過以下選項要求保留它--keep-newer-files
:–keep-newer-files
不要替換比其存檔副本更新的現有文件。
tar
檔案最初用於在磁帶上方便地儲存文件。從長期儲存的角度來看,tar
檔案可以代表一組文件在特定時間點的狀態。從邏輯上講,這應該包括該存檔內容的時間戳。修改時間戳是文件內容何時被修改的可靠度量,而不是 atime(如果您讀取文件,則會更改)或 ctime(當 tar“修復”提取文件上的任何元數據時會更改)。-d
因為修改時間存在於存檔中,您還可以使用/--diff
選項將該資訊與現有文件系統上的文件進行比較:( ) or操作將指定的存檔成員與同名文件進行比較,然後報告文件大小、模式、所有者、修改日期和內容的差異
--compare
。-d``--diff
最後,如果你真的需要在提取檔案時忽略修改時間戳,
-m
/--touch
選項可以做到這一點:
-m
,--touch
不提取數據修改時間。使用此選項時,tar 將其提取的文件的數據修改時間保留為提取文件的時間,而不是將其設置為存檔中記錄的時間。