2015-04-05 37 views
1

我將提供以下腳本重現該問題「上次更改的時間」指令「STAT」:「CP -a」(複製在歸檔模式下)不影響在

mkdir a 
touch a/f 
sleep 1 
cp -a a b 
stat --printf="%u %g %a %z\n" a/f 
stat --printf="%u %g %a %z\n" b/f 

結果爲兩個stat通話將時間戳不同

1000 100 644 2015-04-05 10:53:35.736399836 +0200 
1000 100 644 2015-04-05 10:53:36.740399841 +0200 

cp手動告訴,這-a應保留時間戳。 我在做什麼錯? 如何確保時間戳以我可以測試的方式保存在副本中?

我在Xubuntu 14.04試過這個。 Thx任何幫助!

PS(重要):

我只是嘗試了ls訪問時間戳,還有我沒有相同的行爲:

$ ls -l --full-time a/ 
-rw-r--r-- 1 foo bar 0 2015-04-05 10:53:35.736399836 +0200 f 
$ ls -l --full-time b/ 
-rw-r--r-- 1 foo bar 0 2015-04-05 10:53:35.736399836 +0200 f 

難道我檢查我的stat命令錯誤的事情?我想找出一個文件被通過比較備份副本「改爲」 ......

+0

也許我應該使用'%y',最後修改時間?我首先想到這只是爲了改變例如訪問權限和東西,但它似乎也被更新爲文件內容更改...這可能是'ls'在我的示例中使用的... – 2015-04-05 09:21:59

+0

是「最後更改」還包括「出生時間」 ?這意味着,最後的變化可能是YOUNGER,然後最後修改? – 2015-04-05 09:37:47

回答

1

stat打印3個不同時間:

  • 訪問 - 最後時刻的文件爲閱讀
  • 修改 - 上次文件被修改(內容已被修改)
  • 變化 - 最後一次元數據文件被改變(例如,權限)

這就解釋了爲什麼變化時間a/f之間的區別,以b/f(元數據被更新),
修改時間是相同的(文件的內容並沒有在cp改變) 。


File: `a/f' 
... 
Access: 2015-04-05 16:15:22.000000000 +0300 
Modify: 2015-04-05 16:15:13.000000000 +0300 
Change: 2015-04-05 16:15:13.000000000 +0300 

File: `b/f' 
... 
Access: 2015-04-05 16:15:22.000000000 +0300 
Modify: 2015-04-05 16:15:13.000000000 +0300 
Change: 2015-04-05 16:19:49.000000000 +0300 
+0

但不應'cp -a'保留元數據? – 2015-04-05 20:19:06

+0

沒有。導致它是一個不同位置的文件 - 這是元數據的一部分。 '-p'都不會保留元數據。 – 2015-04-06 15:27:54