find -exec {} + limite da lista de argumentos

4

Eu sei que quando o tamanho máximo da lista de argumentos é atingido, xargs continua criando novas listas até que todos os arquivos sejam incluídos;

mas find -exec <command> {} + faz a mesma coisa ou não funcionará se o tamanho da lista exceder a saída de getconf ARG_MAX ?

    
por EmmaV 20.11.2018 / 11:32

2 respostas

9

Sim, find -exec ... {} + executa o comando especificado quantas vezes forem necessárias para acomodar todos os argumentos sem exceder o tamanho máximo da lista de argumentos em cada chamada. Isso é especificado por POSIX :

If the primary expression is punctuated by a <plus-sign>, the primary shall always evaluate as true, and the pathnames for which the primary is evaluated shall be aggregated into sets. [...] An argument containing only the two characters "{}" shall be replaced by the set of aggregated pathnames, with each pathname passed as a separate argument to the invoked utility in the same order that it was aggregated. The size of any set of two or more pathnames shall be limited such that execution of the utility does not cause the system's {ARG_MAX} limit to be exceeded.

(ênfase minha).

    
por 20.11.2018 / 11:35
3

Ele faz a mesma coisa, ou seja, usar -exec ... {} + executará o utilitário fornecido com lotes de nomes de caminhos encontrados, uma ou várias vezes. É para isso que esta sintaxe é.

    
por 20.11.2018 / 11:36