最简单的,如果我执行
find . -type f -exec cp {} /new/path/{}
扩展的路径是/new/path/./path/to/file。我想在exec中使用{}之前删除那个以find命令为前缀的./。
我正在使用内置的Freebsd查找,但是如果有帮助的话我可以访问gnufind(虽然我通常不使用gnufind)。
答案 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 - )