1

最简单的,如果我执行

find . -type f -exec cp {} /new/path/{}

展开的路径是/new/path/./path/to/file。在我在 exec 中使用 {} 之前,我想删除以 find 命令为前缀的 ./ 。

我正在使用内置的 Freebsd find,但如果有帮助的话,我确实可以访问 gnufi​​nd(尽管我通常不使用 gnufi​​nd)。

4

1 回答 1

0

您将遇到问题的地方是当 find 下降到子目录时,它会尝试执行类似cp ./foo/bar.txt /new/path/./foo/bar.txt“/new/path”没有子目录“foo”之类的东西——您可能想要:

  • 指定-maxdepth 1这样您就不会进入子目录

    find . -maxdepth 1 -type f -exec cp {} /new/path/{} \;
    
  • 只需使用目录目标cp,因此文件最终位于单个目录中(如果您有“./foo/bar.txt”和“./qux/bar.txt”,则会发生冲突)

    find . -type f -exec cp -t /new/path {} +
    
  • 用于tar复制整个树:这将保留目录结构

    tar cf - . | ( cd /new/path && tar xvf - )
    
于 2015-03-12T20:52:39.630 回答