“cp -a”(在归档模式下复制)不会影响“上次更改时间”中的“stat”命令

时间:2015-04-05 09:07:29

标签: bash backup stat cp

我将提供以下脚本来重现问题:

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尝试了这个。感谢任何帮助!

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命令检查错误的东西了吗?我想知道文件是否已被更改"通过将其与备份中的副本进行比较...

1 个答案:

答案 0 :(得分:1)

stat打印3次不同的时间:

  
      
  • 访问权限 - 文件最后一次读取
  •   
  • 修改 - 上次修改文件(内容已被修改)
  •   
  • 更改 - 文件的最后一次元数据已更改(例如权限)
  •   

这解释了为什么更改时间在a/fb/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