最简单的,如果我执行
find . -type f -exec cp {} /new/path/{}
展开的路径是/new/path/./path/to/file。在我在 exec 中使用 {} 之前,我想删除以 find 命令为前缀的 ./ 。
我正在使用内置的 Freebsd find,但如果有帮助的话,我确实可以访问 gnufind(尽管我通常不使用 gnufind)。
最简单的,如果我执行
find . -type f -exec cp {} /new/path/{}
展开的路径是/new/path/./path/to/file。在我在 exec 中使用 {} 之前,我想删除以 find 命令为前缀的 ./ 。
我正在使用内置的 Freebsd find,但如果有帮助的话,我确实可以访问 gnufind(尽管我通常不使用 gnufind)。
您将遇到问题的地方是当 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 - )