我知道,当达到最大参数列表大小时,xargs
会不断创建新列表,直到包含所有文件;
但是find -exec <command> {} +
如果列表的大小超出了输出,它会做同样的事情还是不起作用getconf ARG_MAX
?
答案1
是的,find -exec ... {} +
根据需要多次运行给定命令以容纳所有参数,而不会超过每次调用中的最大参数列表大小。这是由POSIX:
如果主表达式由 <加号> 标点,则主表达式应始终评估为 true,并且评估主表达式的路径名应聚合到集合中。 [...] 仅包含两个字符“的参数”
{}
”的参数应替换为聚合路径名集,每个路径名按照聚合顺序作为单独的参数传递给调用的实用程序。任何两个或多个路径名集合的大小均应受到限制,以便实用程序的执行不会导致超出系统的 {ARG_MAX} 限制。
(强调我的)。
答案2
它做同样的事情,即 using-exec ... {} +
将使用批量找到的路径名执行给定的实用程序一次或多次。这就是这个语法的用途。