2010-02-27 11:13:48 +0000 2010-02-27 11:13:48 +0000
90
90

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

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

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

我需要在不改变时间戳的情况下复制文件。

答案 (4)

106
106
106
2010-02-27 11:20:21 +0000

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所示。另外,statstat -x可以用来很好地显示数据访问、数据修改和文件状态变化时间,对于macOS来说,可以使用显式格式化将出生时间添加到其中

stat -f "%n%N%nAccess (atime): %Sa%nModify (mtime): %Sm%nChange (ctime): %Sc%nBirth (Btime): %SB%n" *
16
16
16
2015-06-09 15:45:17 +0000

当使用GNU Coreutils中的cp时,只保留时间戳,而不保留用户ID、组ID或文件模式等属性,可以使用长写的--preserve来明确指定要保留的属性列表。

cp --preserve=timestamps source destination

不过要注意的是,其他Unices可能不支持这种语法。另一种选择是使用--timesrsync参数,大多数安装上应该都有。

11
11
11
2010-02-27 11:23:37 +0000

Unix文件系统有三个时间,即访问时间(atime)、修改时间(mtime)和inode改变时间(ctime)。你可以用触摸程序改变访问时间和修改时间,例如

cp orig copy touch -r orig copy

但是,你不能改变inode改变时间。

0
0
0
2013-07-21 16:57:14 +0000

我最近需要做一些类似的事情,但使用symlink代替。要创建一个符号链接,并保留原始时间戳。cp -ps src_file dst_symlink