Quando você canaliza a saída, ls
age de maneira diferente.
Este fato está oculto na documentação de informações :
If standard output is a terminal, the output is in columns (sorted vertically) and control characters are output as question marks; otherwise, the output is listed one per line and control characters are output as-is.
Para provar, tente executar
ls
e depois
ls | less
Isso significa que, se você quiser que a saída seja garantida como um arquivo por linha, independentemente de estar sendo canalizada ou redirecionada, você precisa executar
ls -1
( -1
é o número um)
Ou, você pode forçar o ls | less
a gerar colunas usando
ls -C
( -C
é um C maiúsculo)