find / path / -exec命令'{}'+中的+是什么?


13

什么是+find /path/ -exec command '{}' +做什么?相对于find /path/ -exec command '{}' \;

Answers:


17

“ +”在所有找到的文件中组成一个大命令行,以最大程度地减少要运行的命令数量。

考虑到find命令查找四个文件的情况。

find . -type f -exec command '{}' \;

会产生

command file1
command file2
command file3
command file4 

另一方面

find . -type f -exec command '{}' \+

产生

command file1 file2 file3 file4

3
如果您知道xargs-exec … {} +则执行与相同的操作-print | xargs …,但是没有引用问题(这-print0 | xargs -0是另一种方法,但是它的可移植性较差)。
吉尔(Gilles)'所以

4

从手册页:

-exec命令{} +

-exec操作的此变体在选定的文件上运行指定的命令,但是通过在末尾附加每个选定的文件名来构建命令行。该命令的调用总数将远小于匹配文件的数目。命令行的构建与xargs构建命令行的方式几乎相同。命令中仅允许一个{{}”实例。该命令在起始目录中执行。


1
男人,非常...简洁?我发现它缺乏深度和清晰度。
xenoterracide 2010年

这样做的目的不是盲目地为每个文件生成一个进程,而是将文件名收集在一起并更少地调用命令。一个示例:它不是创建3个不同的“ rm FILENAME”进程,而是收集文件名并执行“ rm FILE1 FILE2 FILE3”。
tante

IIRC的某些xargs版本可以选择将这些名称一起批处理到指定的限制,因此您可以从中受益,但是当列表很大时也可以避免溢出。
凯文·坎图

(查找本身就是一种令人恐惧的小语言!)
凯文·坎图

find给我一个半。
马特·亚历山大
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.