Não há nada a ver com multi-threading. Depois que ls
completar sua tarefa, toda a sua saída será enviada para sort
, nunca antes.
Uma explicação mais elevada:
A Unix pipe connects the STDOUT (standard output) file descriptor of the first process to the STDIN (standard input) of the second. What happens then is that when the first process writes to its STDOUT, that output can be immediately read (from STDIN) by the second process.
Using multiple pipes is no different than using a single pipe. Each pipe is independent, and simply links the STDOUT and STDIN of the adjacent processes.
[...] pipes, as such, are consistent everywhere in a bash script.
Fonte: O que é uma explicação simples? como os canos funcionam no BASH?
Tenho certeza de que ls -lh -R |sort >> output.txt
está funcionando como um encanto. Além disso, testei no meu sistema em /
directoryand e ele funcionou corretamente com 1.597.396 arquivos e diretórios (é claro que tive que esperar um pouco).
Se você deseja uma ordem alfabética apenas depois dos nomes de arquivos , não use o argumento ls
with -l
. Se você não deseja ver todas as linhas em branco, use a classificação com o argumento -u
. Então, no geral, você deve usar:
ls -h -R |sort -u >> output.txt
Veja man ls
e man sort
para mais opções ou para uma melhor compreensão.