从查找结果中删除路径前缀

时间:2015-03-12 20:38:45

标签: shell find gnu-findutils

最简单的,如果我执行

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

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

我正在使用内置的Freebsd查找,但是如果有帮助的话我可以访问gnufi​​nd(虽然我通常不使用gnufi​​nd)。

1 个答案:

答案 0 :(得分:1)

你遇到问题的地方是当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&#34,则会遇到冲突;以及" ./ qux /跳回到bar.txt&#34)

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

    tar cf - . | ( cd /new/path && tar xvf - )