cyb*_*r09 7 find cp timestamps
当我执行命令时,find . -mtime -60我得到了过去 60 天内修改的文件列表。
因此,当我执行时,find . -mtime -60 -exec cp {} /tmp/1 \;我可以将这些文件复制到新目录进行处理
但是,如果我想保留时间戳,则无法仅复制执行时所需的文件 find . -mtime -60 -exec cp -LR --preserve=timestamps {} /tmp/2 \;
最终发生的是源目录中的所有文件都被复制,而不仅仅是我需要的文件。
这里有什么解决办法吗?
Gra*_*eme 11
这里发生的事情是,当您使用-R选项cp并提供目录作为参数时,它会复制该目录中的所有内容。此外,这不会保留目录结构,因为较低目录中的任何文件都将直接复制到/tmp/2. 这可能是您想要的(有关如何以这种方式进行操作,请参阅X Tian 的回答),但请注意,如果任何文件具有相同的名称,一个文件将在目标位置覆盖另一个文件。
要保留目录结构,您可以使用cpio:
find . -mtime -60 -print0 | cpio -0mdp /tmp/2
Run Code Online (Sandbox Code Playgroud)
如果-0(或等效)选项不可用,您可以执行此操作,但请注意您的文件名均不包含换行符:
find . -mtime -2 | cpio -mdp /tmp/2
Run Code Online (Sandbox Code Playgroud)
cpio也应该支持该-L选项,但要小心,因为在某些情况下它会导致无限循环。