如果我使用将某个文件从某个地方复制到另一个地方cp
,则复制文件上的时间戳将设置为复制的时间。
有没有什么方法可以避免这种情况?
我需要复制文件而不改变其时间戳。
答案1
cp -p
成功了。对于 Linux:
-p
与...一样--preserve=mode,ownership,timestamps
-p
使 cp 保留副本中每个源文件的以下属性:修改时间、访问时间、文件标志、文件模式、ACL、用户 ID 和组 ID(如权限允许)。
和对于 OS X:
-p
使 cp 保留副本中每个源文件的以下属性:修改时间、访问时间、文件标志、文件模式、用户 ID 和组 ID(根据权限允许)。访问控制列表 (ACL) 和扩展属性 (EA)(包括资源分支)也将被保留。
请注意,这可能会/将会改变源文件的访问时间(atime),如图所示ls -lu
。此外,stat
或stat -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 更改时间。