54 votes

Comment faire pour que ls trie par extension de fichier et ensuite par nom ?

Par défaut, la commande ls trie uniquement par nom de fichier, mais je veux que les répertoires apparaissent avant les autres types de fichiers. Je pourrais même vouloir que les fichiers soient triés par extension, comme l'explorateur Windows le fait par la colonne type. Existe-t-il un moyen de faire quelque chose de similaire avec ls ?

3voto

Rowan Points 1133

Si vous n'êtes pas sous linux,

ls -l |sort -d -k 1.1,1.1r -k 9 |awk '{print $9}'

devrait trier les répertoires en premier (dites-moi si je me trompe). Il ne trie pas par extension, cependant : vous devez rendre l'instruction awk beaucoup plus chargée si vous voulez faire cela ...


Pour que cela fonctionne également avec les noms contenant des espaces, je remplacerais probablement l'awk par quelque chose comme sed -E -e 's/([^ ]+[ ]+){8}//' pour éliminer les 8 premiers champs au lieu d'imprimer le 9e.

0voto

user192273 Points 11

J'ai ajouté à mon .bashrc (linux) la ligne

alias lx = "ls -X"

de cette façon, je n'ai qu'à taper lx et il sera trié par extension.

0voto

PYK Points 111

Une bonne approche consiste à séparer dossiers d'abord, puis le trier les fichiers par extensions en triant et en inversant les résultats :

ls -p | grep /;ls -p | grep -v / | rev | sort | rev

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X