我有一个包含子目录和其他文件的目录,并希望使用另一个文件/目录的日期/时间戳递归更新日期/时间戳。
我知道:
touch -r file directory
更改文件或目录的日期/时间戳与其他文件或目录,但不包含任何内容。还有查找版本:
find . -exec touch -mt 201309300223.25 {} +\;
如果我可以指定实际的文件/目录并使用其他日期/时间戳,这将正常工作。有一个简单的方法吗?更好的是,有没有办法避免在做'cp'时更改/更新时间戳?
答案 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