Hay una longitud máxima de la lista de argumentos para un nuevo proceso en el sistema POSIX. finddividirá la ejecución si las rutas de los archivos son más largas que esto. Para ver el límite en Linux, use xargs --show-limits(no funcione en Mac OS, si alguien conoce una alternativa mejor, comente aquí)
editar: robado directamente de la respuesta de Gnouc, la forma POSIX para obtener la longitud máxima de la lista de argumentos es getconf ARG_MAX. Sin embargo, realicé un experimento en mi máquina Mac OS, y parece que findusa un poco más de la mitad de ese número. Esto es coherente con el hecho de que, en el sistema donde funciona, xargs --show-limitsnos dice que no usará la longitud máxima del argumento (en este caso también usará aproximadamente la mitad de ese número), sin embargo, no pude encontrar una explicación para eso.
editar 2: parece que la única forma confiable de determinar cuántos parámetros se findmantendrán unidos para cada invocación es experimentar, por ejemplo ejecutando
find / -exec echo {} + | wc -cl
Como el resultado de findtiene una línea para cada echoinvocación, es posible contarlos usando wc -l. El número total de bytes echoed es la salida de en su wc -clugar. Al dividir uno por otro, obtiene el número promedio de bytes en los parámetros para cada invocación de comando (aunque un valor ligeramente menor, debido al redondeo, aproximadamente la mitad de la longitud promedio de una ruta en su sistema)
find / -exec echo | wcy midiendo la relación entre el recuento de caracteres y el recuento de líneas. Encontré que la longitud máxima de la línea de comando utilizadafindes significativamente menor que el límite teórico de POSIX, y mucho más cerca de laSize of command buffer we are actually usinglínea en la salidaxargs --show-limits. Esto es cierto para Linux y puede ser cierto para la implementación de Mac OSfind, aunquexargsno imprimirá el valor en Mac OS. ¿Alguna idea de por qué sucede esto?