如何在Unix中复制文件而不更改其上次修改时间?


89

如果我使用将文件从某个地方复制到另一个地方cp,则复制文件上的时间戳记将设置为复制时间。

有什么办法可以避免这种情况?

我需要复制文件而不更改其时间戳。

Answers:


103

cp -p绝招。对于Linux

-p 如同 --preserve=mode,ownership,timestamps

对于FreeBSD

-p 使cp在副本中保留每个源文件的以下属性:修改时间,访问时间,文件标志,文件模式,ACL,用户ID和组ID(权限允许)。

对于OS X

-p使cp在副本中保留每个源文件的以下属性:修改时间,访问时间,文件标志,文件模式,用户ID和组ID(权限允许)。访问控制列表(ACL)和扩展属性(EA)(包括资源派生)也将被保留。


25
cp -a也很高兴知道,它不仅暗示-p,而且暗示-R复制整个目录,并且-d保留链接。
Casualuser

2
请注意,尽管使用GNU Coreutils cp -p不仅可以保留时间戳,还可以保留模式和所有权,并且在FreeBSD上除了修改时间外,还可以保留»访问时间,文件标志,文件模式,ACL,用户ID和组ID。以及在OS X上另外»扩展属性,包括资源派发«。
Stefan Schmidt

在最新的OSX上,cp -p仍然会触摸源文件的时间戳
afathman

15

当使用cpGNU Coreutils的,只保留时间戳,而不是属性,比如用户ID,组ID或文件模式存在的速记--preserve,它允许明确指定属性的列表被保存下来。

cp --preserve=timestamps source destination

请注意,尽管其他Unices可能不支持此语法。一种替代方法是使用在大多数安装中应该可用的--times参数rsync


4
这是正确的答案。使用-p不是正确的答案。-p保留所有权和方式。可能是不需要的..也没有被问到。
bshea

10

在Unix文件系统上,有3次访问时间(atime),修改时间(mtime)和inode更改时间(ctime)。您可以使用触摸程序来更改访问时间和修改时间,例如

cp orig复制
touch -r orig复制

但是,您无法更改inode的更改时间。


1
有关inode更改时间的信息,另请参见
linux-

0

我最近需要做类似的事情,但改用symlink。要创建符号链接并保留原始时间戳记:cp -ps src_file dst_symlink


作为注释,这可能对少数读者有用,作为答案,这对大多数读者来说是增加噪音的原因。
ndemou
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.