ls
testa se a saída está indo para um terminal. Se a saída não estiver indo para um terminal, então -1
é o padrão. (Isso pode ser substituído por um dos -C
, -m
ou -x
opções.)
Portanto, quando ls
for usado em um pipeline e você não o tiver substituído por outra opção, ls
será usado -1
. Você pode confiar nisso porque esse comportamento é exigido pelo POSIX
Especificação POSIX
O POSIX requer -1
como padrão sempre que a saída não for para um terminal:
A especificação POSIX :
O formato padrão será listar uma entrada por linha na saída padrão; as exceções são para terminais ou quando uma das opções -C, -m ou -x é especificada. Se a saída for para um terminal, o formato é definido pela implementação.
Essas três opções que substituem o formato padrão de coluna única são:
-C
Grava a saída da coluna de texto múltiplo com entradas classificadas nas colunas, de acordo com a sequência de intercalação. O número de colunas de texto e os caracteres separadores de coluna não são especificados, mas devem ser adaptados à natureza do dispositivo de saída. Esta opção desativa a saída de formato longo.
-m
formato de saída Stream; listar nomes de caminho na página, separados por um caractere <comma> seguido por um caractere <space>. Use um caractere <newline> como terminador da lista e após a sequência separadora quando não houver espaço em uma linha para a próxima entrada da lista. Esta opção desativa a saída de formato longo.
-x
O mesmo que -C, exceto que a saída da coluna de texto múltiplo é produzida com entradas classificadas nas colunas, em vez de para baixo. Esta opção desativa a saída de formato longo.
Documentação GNU
No manual GNU ls :
'-1'
'--format = coluna única'
Liste um arquivo por linha. Esse é o padrão para ls quando a saída padrão não é um terminal . Consulte também as opções -b e -q para suprimir a saída direta de caracteres de nova linha em um nome de arquivo. [Enfase adicionada]
Exemplos
Vamos criar três arquivos:
$ touch file{1..3}
Quando a saída vai para um terminal, o GNU ls
escolhe usar um formato de várias colunas:
$ ls
file1 file2 file3
Quando a saída vai para um pipeline, a especificação POSIX exige que a coluna única seja o padrão:
$ ls | cat
file1
file2
file3
As três exceções que substituem o comportamento padrão de coluna única são -m
separadas por vírgula, -C
ordenadas -x
por colunas e ordenadas por:
$ ls -m | cat
file1, file2, file3
$ ls -C | cat
file1 file2 file3
$ ls -x | cat
file1 file2 file3
n=0; for i in .* *; do ((n++)) ; done ; echo $n
(largar o. * se não quiser contar essas). ou:ls -1d ./.* ./* | grep '^\./' | wc -l
(como os nomes dos arquivos não podem conter '/')