Pouvez-vous trier une liste ls par nom?
Mon ls trie par nom par défaut. Que vois-tu?
man ls
déclare:
List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.
:
Pour quelque chose de simple, vous pouvez combiner ls avec sort. Pour juste une liste de noms de fichiers:
ls -1 | tri
Pour les trier dans l'ordre inverse:
ls -1 | sort -r
ls
from coreutils
effectue un tri sensible à la localisation par défaut, et peut donc produire des résultats surprenants dans certains cas (par exemple, %foo
triera entre bar
et quux
dans LANG=en_US
). Si vous voulez un tri ASCIIbetical, utilisez
LANG=C ls
La beauté des outils * nix est que vous pouvez les combiner:
ls -l | sort -k9,9
La sortie de ls -l
ressemblera à ceci
-rw-rw-r-- 1 luckydonald luckydonald 532 Feb 21 2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt
Ainsi, avec 9,9
, vous triez la colonne 9
jusqu'à la colonne 9
, les noms de fichier. Vous devez indiquer où vous arrêter, ce qui est la même colonne dans ce cas. Les colonnes commencent par 1
.
De même, si vous souhaitez ignorer les majuscules/minuscules, ajoutez --ignore-case
à la commande de tri.
AVIS: "a" vient APRES "Z":
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
Les fichiers n'étant différents que par une chaîne numérique peuvent être triés sur ce nombre à condition qu'il soit précédé d'un séparateur.
Dans ce cas, la syntaxe suivante peut être utilisée:
ls -x1 file | sort -t'<char>' -n -k2
Exemple:
ls -1 TRA*log | sort -t'_' -n -k2
TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log
Depuis la page de manuel (pour bash ls):
Triez les entrées par ordre alphabétique si aucun de -cftuSUX ni de --sort.
Vérifiez votre fichier .bashrc
pour les alias.
L'utilitaire ls
doit être conforme à la norme IEEE 1003.1-2001 ( POSIX.1
) qui indique:
22027: il doit trier les opérandes de répertoire et les non-opérateurs de répertoire séparément en fonction de la séquence de classement dans les paramètres régionaux en cours.
26027: Par défaut, le format n'est pas spécifié, mais la sortie doit être triée par ordre alphabétique par nom de symbole:
- Nom de la bibliothèque ou de l'objet, si −A est spécifié
- Nom du symbole
- Type de symbole
- Valeur du symbole
- La taille associée au symbole, le cas échéant
ls -X fonctionne à cet effet, au cas où vous auriez aliasé ls sur un défaut plus utile.
In Debian Jessie, this works Nice:
ls -lah --group-directories-first
# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha
# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --