如何在 Unix 中复制文件而不改变其最后修改时间?

如何在 Unix 中复制文件而不改变其最后修改时间?

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

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

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

答案1

cp -p成功了。对于 Linux

-p与...一样--preserve=mode,ownership,timestamps

对于 FreeBSD

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

对于 OS X

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

请注意,这可能会/将会改变源文件的访问时间(atime),如图所示ls -lu。此外,statstat -x可用于很好地显示数据访问、数据修改和文件状态更改时间,对于 macOS,可以使用显式格式添加出生时间

stat -f "%n%N%nAccess (atime): %Sa%nModify (mtime): %Sm%nChange (ctime): %Sc%nBirth  (Btime): %SB%n" *

答案2

cp使用GNU 核心实用程序,为了仅保留时间戳而不保留用户 ID、组 ID 或文件模式等属性,有一种通用--preserve方法可以明确指定要保留的属性列表。

cp --preserve=timestamps source destination

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

答案3

Unix 文件系统上有三个时间:访问时间 (atime)、修改时间 (mtime) 和 inode 更改时间 (ctime)。您可以使用 touch 程序更改访问时间和修改时间,例如

cp 原件
touch -r 原始副本

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

相关内容