0

我想每个人都熟悉这个脚本:

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,结果都相同。他们都开始复制目录路径的每一部分。

有任何想法吗?

4

1 回答 1

2

你有两个问题:

  1. 您尝试递归地复制递归列表(双递归),从而包括您不想要的文件
  2. 您复制时没有保留与源基本目录相关的目录结构,因此最终会得到一个损坏的树

相反,您应该将文件的递归列表非递归到其相应目录。您可以使用rsync's--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; }
于 2015-05-18T19:58:39.760 回答