Isso tem a ver com gravações em pipes. Com -L16
você está executando um processo para cada 16 arquivos, o que produz cerca de mil caracteres, dependendo de quanto tempo os nomes de arquivos estão. Com -L64
você é cerca de quatro mil. O programa ls
quase certamente usa a biblioteca stdio, e quase certamente usa um buffer de 4kB para gerar uma saída para reduzir o número de chamadas de gravação.
Portanto, find produz uma carga de nomes de arquivos e, em seguida, (para o caso -L64) os xargs os dividem em pacotes de 64 e iniciam 4% de processosls
para manipulá-los. Cada ls
gerará seus primeiros 4k de saída e os gravará no pipe para classificar. Note que este 4k tipicamente não terminará com uma nova linha. Então diga que o terceiro ls
obtém seu primeiro 4kB pronto primeiro e termina
lrwxrwxrwx 1 root root 6 Oct 21 2013 bzegrep -> bzgrep
-rwxr-xr-x 1 root root 4877 Oct 21 2013 bzexe
lrwxrwxrwx 1 root root 6 Oct 2
e depois o primeiro ls produz algo, por ex.
total 123459
a entrada para classificar incluirá lrwxrwxrwx 1 root root 6 Oct 2total 123459
No caso -L16
, os processos ls
(normalmente) só geram um conjunto completo de resultados de uma só vez.
É claro que para este caso você está apenas desperdiçando tempo e recursos usando xargs e ls, você deve deixar find
mostrar as informações que já tem em vez de executar programas extras para descobrir as informações novamente.