4

我有一个包含子目录和其他文件的目录,并且想用另一个文件/目录的日期/时间戳递归更新日期/时间戳。

我知道:

touch -r file directory

与其他文件或目录一起更改文件或目录的日期/时间戳,但其中没有任何内容。还有 find 版本:

find . -exec touch -mt 201309300223.25 {} +\;

如果我可以指定实际的文件/目录并使用另一个日期/时间戳,这将工作正常。有没有一种简单的方法可以做到这一点?更好的是,有没有办法在执行“cp”时避免更改/更新时间戳?

4

2 回答 2

2

更好的是,有没有办法在执行“cp”时避免更改/更新时间戳?

是的,cp-p选项一起使用:

-p

与 --preserve=mode,ownership,timestamps 相同

- 保存

保留指定的属性(默认:模式、所有权、时间戳),如果可能,附加属性:上下文、链接、xattr、所有

例子

$ ls -ltr
-rwxrwxr-x 1 me me  368 Apr 24 10:50 old_file
$ cp old_file not_maintains    <----- does not preserve time
$ cp -p old_file do_maintains  <----- does preserve time
$ ls -ltr
total 28
-rwxrwxr-x 1 me me  368 Apr 24 10:50 old_file
-rwxrwxr-x 1 me me  368 Apr 24 10:50 do_maintains   <----- does preserve time
-rwxrwxr-x 1 me me  368 Sep 30 11:33 not_maintains  <----- does not preserve time

要基于另一个路径上的对称文件递归touch目录上的文件,您可以尝试以下操作:

find /your/path/ -exec touch -r $(echo {} | sed "s#/your/path#/your/original/path#g") {} \;

它对我不起作用,但我想这是尝试/测试更多一点的问题。

于 2013-09-30T09:31:04.437 回答
-1

除了“cp -p”之外,您还可以使用“touch -t”(重新)创建旧时间戳。有关更多详细信息,请参见“触摸”的手册页。

touch -t 200510071138 old_file.dat
于 2013-09-30T09:34:25.853 回答