如何使用带有 -exec 操作的 find 命令或 xargs 将文件从一个文件夹复制到另一个文件夹

如何使用带有 -exec 操作的 find 命令或 xargs 将文件从一个文件夹复制到另一个文件夹

我想使用 find 命令和带有加号 (+) 的 -exec 操作(以提高效率),或者使用 xargs 将文件从一个目录复制到另一个目录。下列的答案对我不起作用。我使用的是 bash 版本:4.3.48(1)。尝试:

find . \( \( -type f -size -2M \) -o \( -type f -size 2M \) \) -exec cp '{}' ~/Pictures/test_folder '+'

或者:

find . \( -type f -size -2M \) -o \( -type f -size 2M \) | xargs cp -t ~/Pictures/test_folder 

对我来说不起作用。也许我犯了某种语法错误,但我已经尝试了上述命令的几种变体,但仍然无法使其工作。测试文件夹是我想要将文件复制到的位置。

答案1

我希望这能起作用:

find . -type f \( -size -2M -o -size 2M \) -exec cp -t ~/Pictures/test_folder {} +

(我拿出了通用-type f测试。)

对于+{}预计是-exec命令中的最后一项。从GNU 查找手册

命令中只{}允许有一个,并且必须出现在命令末尾,紧接在 之前。出现在紧接之后以外的任何位置的+A都不被视为特殊(即,它不会终止命令)。+{}

如果您使用findxargs,请记住使用-print0-0选项:

find ... -print0 | xargs -0 cp -t ...

使用 时-print0,文件名以 ASCII NUL 字符分隔,这是路径中唯一不允许的字符。如果没有这个,xargs文件名可能会以空格分隔,因此命令./file1 - foo.txt会将 a 视为./file1,-和。foo.txtcp

相关内容