文件夹和文件的副本太多

时间:2015-05-18 19:56:02

标签: bash rsync cp pax cpio

我认为每个人都熟悉这个剧本:

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。它们都开始复制目录路径的每个部分。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你有两个问题:

  1. 您尝试递归复制递归列表(双递归),从而包含您不想要的文件
  2. 您可以在不保留与源基目录相关的目录结构的情况下进行复制,从而最终得到一个受损的树
  3. 相反,您应该非递归地将递归的文件列表添加到相应的目录中。您可以使用rsync的{​​{1}}和流程替换执行此操作:

    --files-from

    或者,通过rsync --from0 --files-from <(find ./src -mtime +5 -print0) \ ./ ./target

    cpio