如何在unix中复制一个文件而不改变其最后修改时间?
如果我使用cp
将某个文件从某个地方复制到另一个地方,被复制文件的时间戳会被设置为复制的时间。
有没有什么方法可以避免这种情况?
我需要在不改变时间戳的情况下复制文件。
如果我使用cp
将某个文件从某个地方复制到另一个地方,被复制文件的时间戳会被设置为复制的时间。
有没有什么方法可以避免这种情况?
我需要在不改变时间戳的情况下复制文件。
cp -p
可以做到这一点。对于 Linux :
-p
与--preserve=mode,ownership,timestamps
相同 对于 FreeBSD :
-p
导致 cp 在拷贝中保留每个源文件的以下属性:修改时间、访问时间、文件标志、文件模式、ACL、用户 ID 和组 ID,这是由权限允许的。
和 对于 OS X 。
-p
促使 cp 在复制中保留每个源文件的以下属性:修改时间、访问时间、文件标志、文件模式、用户 ID 和组 ID,这是由权限允许的。访问控制列表(ACL)和扩展属性(EAs),包括资源分叉,也将被保留。
请注意,这可能/将改变源文件的访问时间(atime),如ls -lu
所示。另外,stat
或stat -x
可以用来很好地显示数据访问、数据修改和文件状态变化时间,对于macOS来说,可以使用显式格式化将出生时间添加到其中。
stat -f "%n%N%nAccess (atime): %Sa%nModify (mtime): %Sm%nChange (ctime): %Sc%nBirth (Btime): %SB%n" *
当使用GNU Coreutils中的cp
时,只保留时间戳,而不保留用户ID、组ID或文件模式等属性,可以使用长写的--preserve
来明确指定要保留的属性列表。
cp --preserve=timestamps source destination
不过要注意的是,其他Unices可能不支持这种语法。另一种选择是使用--times
的rsync
参数,大多数安装上应该都有。