我想每个人都熟悉这个脚本:
find /dir1/dir2/dir3/dir4/* -mtime +5 -exec cp -rf {} /dirA/dirB/dirC/ ;
我的问题是,我希望dir4的内容超过5天,这将是更多的子目录及其内容,复制到dirC与他们的目录结构完好无损。到目前为止听起来不错,这个脚本应该可以完成我认为的工作。
但是它没有做我认为它应该做的事。相反,它从dir1开始,向下钻取到最低的文件夹并开始复制,然后再往上,从dir4开始,依此类推。最终结果是文件夹结构中的所有内容都被复制多次。
我尝试过rsync, cpio和pax来代替cp,无论我是在做rsync -r还是cpio -r或pax -r,结果都是一样的。它们都开始复制目录路径的每个部分。
任何想法?
你有两个问题:
- 你试图递归地复制一个递归列表(双递归),从而包括你不想要的文件
- 复制时不保留与源基目录相关的目录结构,从而得到一个混乱的树
相反,您应该非递归地将文件的递归列表放到相应的目录中。您可以对rsync
的--files-from
和过程替换执行此操作:
rsync --from0 --files-from <(find ./src -mtime +5 -print0)
./ ./target
或者,通过cpio
:
find src/ -mtime +5 -print0 | cpio -0 -o | { cd target && cpio -i; }