我想使用 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都不被视为特殊(即,它不会终止命令)。+
{}
如果您使用find
和xargs
,请记住使用-print0
和-0
选项:
find ... -print0 | xargs -0 cp -t ...
使用 时-print0
,文件名以 ASCII NUL 字符分隔,这是路径中唯一不允许的字符。如果没有这个,xargs
文件名可能会以空格分隔,因此命令./file1 - foo.txt
会将 a 视为./file1
,-
和。foo.txt
cp