Existe um comprimento máximo da lista de argumentos para um novo processo no sistema POSIX. finddividirá a execução se os caminhos dos arquivos forem maiores que isso. Para ver o limite no Linux, use xargs --show-limits(não funcione no Mac OS, se alguém souber uma alternativa melhor, por favor comente aqui)
edit: roubado diretamente da resposta do Gnouc, a maneira POSIX de obter o comprimento máximo da lista de argumentos é getconf ARG_MAX. No entanto, realizei um experimento na minha máquina Mac OS, e parece que findusa um pouco mais da metade desse número. Isso é coerente com o fato de que, no sistema em que funciona, xargs --show-limitsnos diz que não usará o tamanho máximo do argumento (neste caso também usará cerca da metade desse número), no entanto, não consegui encontrar uma explicação por isso.
editar 2: parece que a única maneira confiável de determinar quantos parâmetros findserão mantidos juntos para cada invocação é experimentar, por exemplo, executando
find / -exec echo {} + | wc -cl
Como a saída de findpossui uma linha para cada echochamada, é possível contá-las usando wc -l. O número total de bytes echoed é a saída de wc -cvez. Ao dividir um pelo outro, você obtém o número médio de bytes nos parâmetros para cada chamada de comando (embora um valor ligeiramente mais baixo, devido ao arredondamento, aproximadamente a metade do comprimento médio de um caminho em seu sistema)
find / -exec echo | wce medindo a proporção entre a contagem de caracteres e a linha. Descobri que o comprimento máximo da linha de comando usadofindé significativamente menor que o limite POSIX teórico e muito mais próximo daSize of command buffer we are actually usinglinha na saída dexargs --show-limits. Isso vale para Linux e pode ser verdade para a implementação de Mac OSfind, emboraxargsnão imprima o valor no Mac OS. Alguma idéia de por que isso acontece?