递归触摸文件

时间:2013-09-30 09:26:36

标签: bash shell file touch

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

我知道:

touch -r file directory

更改文件或目录的日期/时间戳与其他文件或目录,但不包含任何内容。还有查找版本:

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

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

2 个答案:

答案 0 :(得分:1)

  

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

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

  

<强> -p

     

与--preserve = mode,ownership,timestamps

相同      

<强> - 保留

     

保留指定的属性(默认值:   模式,所有权,时间戳),如果可能的话,附加属性:   context,links,xattr,all

实施例

$ 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") {} \;

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

答案 1 :(得分:-1)

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

touch -t 200510071138 old_file.dat