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 ?

55voto

Je pense que la réponse complète est plutôt une combinaison de ce qui précède.

-X (later --sort=extension) est supporté sous Linux depuis au moins FC3 et sera trié en fonction de l'extension. --group-directories-first a été ajouté plus récemment (peut-être autour de FC8 ?). Cependant, la combinaison des deux ne semble pas fonctionner (du moins sur FC8).

Le principal problème semble être l'utilisation de clés de tri primaires singulières. Voir ce qui suit discussion sur la liste de diffusion pour y voir plus clair.

26voto

Sous Linux,

$ ls --group-directories-first

17voto

Smerity Points 1160

-X est l'option que vous recherchez :

ls -lX

14voto

Jacob Lyles Points 1004

Sous bash, cela fonctionnera en quelque sorte :

$ ls | rev | sort | rev

De man rev :

 The rev utility copies the specified files to the standard output,
 reversing the order of characters in every line.  If no files are speci-
 fied, the standard input is read.

Alors 1. ls donne sa sortie, avec les drapeaux que vous voulez 2. chaque ligne est inversée 3. puis elles sont triées 4. et inversées à nouveau 5. comme ceci :

  1. comme ça :
  2. chaque ligne est inversée
  3. puis ils sont triés
  4. et inversé à nouveau Donc
  5. ls donne sa sortie, avec les drapeaux que vous voulez.

Ou, plus précisément, comme ci-dessous. Ils sont triés par dernier caractère, puis par avant-dernier, etc. Tous les fichiers .rtf, par exemple, sont listés ensemble, après un fichier .save et un autre fichier sans extension dont le nom se termine par 'e'. Viennent ensuite les fichiers .png, et ainsi de suite. Cela fonctionnera également avec ls -l, car l'extension est normalement la dernière chose sur la ligne (sauf si vous avez des lignes comme "tmp@ -> /home/jones/tmp", où les liens sont suivis de leurs cibles).

 $ ls | rev|sort|rev
 cslu1
 ls.mp2
 ls.mp3
 ls.mp4
 trees\_110214-15
 PAT
 CSLU
 Proxy Form.doc
 finannbyid
 toannbyid
 101209ssi.txt.save
 to\_annotate\_size
 Matas-time-by-week-integration2.rtf
 cyp3.rtf
 data-dir-scan.perl.doc.rtf
 whence-r21-numid.rtf
 platypus.rtf
 Screen shot 2011-01-21 at 2.17.50 PM.png
 emacs print help.png
 log
 new\_month\_log
 special
 Google-ngram-critique.html
 perl\_path.html
 nl
 DWE\_BEN\_89808.2.ann
 foo
 d.o.foo
 100811\_from\_iMac\_Documents\_in\_dock.zip
 to-palikir.zip
 tmp
 file-cleanup
 bar
 data-scan-docs
 cmp-mg-ann-numids
 finished\_numids
 to\_annotate\_numids
 manls.ps
 Mike\_address\_ticket
 cyp2.out
 cyp3.out
 locate-cyp.out
 manls.out
 DWE\_BEN\_89808.2.text
 tag2.txt
 l2.txt
 du-h-d3.txt
 finished\_ann\_numids\_110407\_1714.txt
 finished\_all\_numids\_110407\_1718.txt
 data-dir-scan.perl.doc.txt
 whence-r21-numid.txt
 finannid.txt
 toannid.txt
 b9-workspace-anndiff.txt
 tag.txt
 duh.txt
 d.o-mail.txt
 safextn.txt
 mg3longhdr.txt
 finished\_numids.txt
 41692-langnames.txt
 TimeAnnotationGuidelines.txt
 41langs.txt
 thing4-homedir-links.txt
 bnlinks.txt
 grants.txt
 mata-file-reports.txt
 logx.txt
 logx
 b9-workspace-anndiff.txt~
 bnlinks.txt~

3voto

Matt Connolly Points 691

Si vous travaillez sous Linux, GNU ls soutient le --sort option:-

ls --sort=extension

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