ls
teste si la sortie va vers un terminal. Si la sortie ne va pas vers un terminal, -1
c'est la valeur par défaut. (Cela peut être remplacé par l' un des -C
, -m
ou des -x
options.)
Ainsi, lorsque ls
est utilisé dans un pipeline et que vous ne l'avez pas remplacé par une autre option, ls
sera utilisé -1
. Vous pouvez vous y fier car ce comportement est requis par POSIX
Spécifications POSIX
POSIX requiert -1
par défaut chaque fois que la sortie ne va pas vers un terminal:
La spécification POSIX :
Le format par défaut consiste à répertorier une entrée par ligne vers la sortie standard; les exceptions concernent les terminaux ou lorsqu'une des options -C, -m ou -x est spécifiée. Si la sortie est vers un terminal, le format est défini par l'implémentation.
Ces trois options qui remplacent le format à colonne unique par défaut sont:
-Créez la
sortie de plusieurs colonnes de texte avec des entrées triées dans les colonnes, selon la séquence de classement. Le nombre de colonnes de texte et les caractères de séparation des colonnes ne sont pas spécifiés, mais doivent être adaptés à la nature du périphérique de sortie. Cette option désactive la sortie au format long.
-m
Format de sortie de flux; liste les noms de chemin sur la page, séparés par un caractère <comma> suivi d'un caractère <espace>. Utilisez un caractère <newline> comme terminateur de liste et après la séquence de séparation lorsqu'il n'y a pas de place sur une ligne pour l'entrée de liste suivante. Cette option désactive la sortie au format long.
-x Identique
à -C, sauf que la sortie multi-texte est produite avec des entrées triées plutôt que vers le bas dans les colonnes. Cette option désactive la sortie au format long.
Documentation GNU
Depuis le manuel GNU ls :
'-1'
'--format = single-column'
Liste un fichier par ligne. Il s'agit de la valeur par défaut pour ls lorsque la sortie standard n'est pas un terminal . Voir également les options -b et -q pour supprimer la sortie directe des caractères de nouvelle ligne dans un nom de fichier. [Italiques ajoutés]
Exemples
Créons trois fichiers:
$ touch file{1..3}
Lorsque la sortie va vers un terminal, GNU ls
choisit d'utiliser un format multi-colonnes:
$ ls
file1 file2 file3
Lorsque la sortie est envoyée vers un pipeline, la spécification POSIX requiert que la colonne unique soit la valeur par défaut:
$ ls | cat
file1
file2
file3
Les trois exceptions qui remplacent le comportement par défaut d'une seule colonne sont -m
pour les virgules séparées, -C
pour les colonnes triées et -x
pour les colonnes triées sur:
$ 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
(supprimez le. * si vous ne voulez pas les compter). ou:ls -1d ./.* ./* | grep '^\./' | wc -l
(car les noms de fichiers ne peuvent pas contenir '/')