ls
prueba si la salida va a una terminal. Si la salida no va a una terminal, entonces -1
es la predeterminada. (Esto se puede anular por uno de los -C
, -m
o -x
las opciones).
Por lo tanto, cuando ls
se usa en una tubería y no lo ha anulado con otra opción, ls
lo usará -1
. Puede confiar en esto porque POSIX requiere este comportamiento
Especificación POSIX
POSIX requiere -1
como valor predeterminado cada vez que la salida no va a una terminal:
La especificación POSIX :
El formato predeterminado será enumerar una entrada por línea a la salida estándar; las excepciones son a terminales o cuando se especifica una de las opciones -C, -m o -x. Si la salida es a una terminal, el formato está definido por la implementación.
Estas tres opciones que anulan el formato predeterminado de una sola columna son:
-C
Escribir salida de columna de texto múltiple con entradas ordenadas por columnas, de acuerdo con la secuencia de clasificación. El número de columnas de texto y los caracteres separadores de columna no están especificados, pero deben adaptarse a la naturaleza del dispositivo de salida. Esta opción deshabilita la salida de formato largo.
-m
Formato de salida de flujo; enumere los nombres de ruta en la página, separados por un carácter <comma> seguido de un carácter <space>. Utilice un carácter <línea nueva> como terminador de la lista y después de la secuencia del separador cuando no haya espacio en una línea para la siguiente entrada de la lista. Esta opción deshabilita la salida de formato largo.
-x
Lo mismo que -C, excepto que la salida de columnas de texto múltiple se produce con entradas clasificadas en las columnas, en lugar de hacia abajo. Esta opción deshabilita la salida de formato largo.
Documentación de GNU
Del manual de GNU ls :
'-1'
'--format = single-column'
Lista un archivo por línea. Este es el valor predeterminado para ls cuando la salida estándar no es una terminal . Consulte también las opciones -b y -q para suprimir la salida directa de caracteres de nueva línea dentro de un nombre de archivo. [Énfasis añadido]
Ejemplos
Vamos a crear tres archivos:
$ touch file{1..3}
Cuando la salida va a una terminal, GNU ls
elige usar un formato de múltiples columnas:
$ ls
file1 file2 file3
Cuando la salida se dirige a una tubería, la especificación POSIX requiere que la columna única sea la predeterminada:
$ ls | cat
file1
file2
file3
Las tres excepciones que anulan el comportamiento predeterminado de una sola columna son -m
las separadas por comas, las -C
columnas ordenadas y las -x
columnas ordenadas:
$ 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
(suelte el. * si no desea contarlas). o:ls -1d ./.* ./* | grep '^\./' | wc -l
(como los nombres de archivo no pueden contener '/')