【问题标题】:"cp -a" (Copy in Archive Mode) does not influence "stat" command in "Time of last change"“cp -a”(存档模式下的复制)不影响“上次更改时间”中的“stat”命令
【发布时间】:2015-04-05 21:30:02
【问题描述】:

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

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 命令检查了错误的内容?我想通过将文件与备份中的副本进行比较来确定文件是否被“更改”...

【问题讨论】:

  • 也许我应该使用%y,上次修改时间?我首先认为这只是为了改变例如访问权限之类的,但它似乎也会针对文件内容更改进行更新...这可能是ls 在我的示例中使用的...
  • “最后的变化”是否也包括“出生时间”?这意味着,最后一次更改可能是更年轻,然后是最后一次修改?

标签: bash backup stat cp


【解决方案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

【讨论】:

  • 没有。因为它是具有不同位置的不同文件 - 这是元数据的一部分。 -p 都不会保留元数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
相关资源
最近更新 更多