web-dev-qa-db-fra.com

Comment trier la sortie de `ls`?

Est-il possible d'afficher cette sortie triée avec titlepage_1.pdf avant titlepage_19.pdf?

$ ls
allTitlepage.pdf         titlepage_12.pdf  titlepage_19.tex  titlepage_26.pdf  titlepage_32.tex  titlepage_4.tex
allTitlepage.tex         titlepage_12.tex  titlepage_1.pdf   titlepage_26.tex  titlepage_33.pdf  titlepage_5.pdf
assignment.pdf           titlepage_13.pdf  titlepage_1.tex   titlepage_27.pdf  titlepage_34.pdf  titlepage_5.tex
assignment.tex           titlepage_13.tex  titlepage_20.pdf  titlepage_27.tex  titlepage_34.tex  titlepage_6.pdf
graphicsAssignment2.pdf  titlepage_14.pdf  titlepage_20.tex  titlepage_28.pdf  titlepage_35.pdf  titlepage_6.tex
graphicsAssignment2.tex  titlepage_14.tex  titlepage_21.pdf  titlepage_28.tex  titlepage_35.tex  titlepage_7.pdf
README.md                titlepage_15.pdf  titlepage_21.tex  titlepage_29.pdf  titlepage_36.pdf  titlepage_7.tex
thesisTitlepage.pdf      titlepage_15.tex  titlepage_22.pdf  titlepage_29.tex  titlepage_36.tex  titlepage_8.pdf
thesisTitlepage.tex      titlepage_16.pdf  titlepage_22.tex  titlepage_2.pdf   titlepage_37.pdf  titlepage_8.tex
titlepage_0.pdf          titlepage_16.tex  titlepage_23.pdf  titlepage_2.tex   titlepage_37.tex  titlepage_9.pdf
titlepage_0.tex          titlepage_17.pdf  titlepage_23.tex  titlepage_30.pdf  titlepage_38.pdf  titlepage_9.tex
titlepage_10.pdf         titlepage_17.tex  titlepage_24.pdf  titlepage_30.tex  titlepage_38.tex  titlepage_one.pdf
titlepage_10.tex         titlepage_18.pdf  titlepage_24.tex  titlepage_31.pdf  titlepage_3.pdf   titlepage_one.tex
titlepage_11.pdf         titlepage_18.tex  titlepage_25.pdf  titlepage_31.tex  titlepage_3.tex   titlepage_two.tex
titlepage_11.tex         titlepage_19.pdf  titlepage_25.tex  titlepage_32.pdf  titlepage_4.pdf
13
alhelal

Utilisez le commutateur -v [sorte naturelle des nombres (version) dans le texte]

ls -v
30
Vijay

La sortie est triée. Selon la page de manuel ls:

Triez les entrées par ordre alphabétique si ni -cftuvSUX ni --sort n’est spécifié.

Mais si vous voulez aller plus loin, vous avez au moins deux options:

Option 1 - Les commutateurs de tri ls

man ls vous indique un certain nombre de commutateurs que vous pouvez utiliser pour trier, en particulier, le page de manuel de ls dit:

aucune (-U), taille (-S), heure (-t), version (-v), extension (-X)

Dans votre cas, vous voulez "version" trier (-v). Soyez prudent, car cela triera également tout ce qui a un arrangement blahblah-X.Y.Z-A qui peut ne pas être tout à fait ce que vous voulez. Voir aussi explication de GNU sur le tri de version .

Option 2 - Pipes pour les commandes de tri

Vous pouvez utiliser un tube | pour envoyer le résultat à une autre commande, par exemple la commande sort que vous pouvez utiliser pour trier de nombreuses autres manières. , comme dans ls -1 | sort -n qui est utile si vous avez des fichiers numérotés. Le commutateur -1 garantit que la sortie est une ligne par fichier.

De même, vous pouvez manipuler la sortie pour faciliter le tri en utilisant des éléments tels que sed ou awk.

Il y a beaucoup de façons de répondre à ce genre de question. Vous pouvez trouver un tutoriel sur le shell Linux utile.

* (Voir ce que j'ai fait là-bas? :-P)

13
tudor

Comme indiqué dans un commentaire, le résultat est déjà trié, mais par caractères et non par nombres. Vous voudrez peut-être diriger la sortie de ls à sort qui contient un commutateur permettant de trier par numéros dans des chaînes:

ls | sort --version-sort

De la page de manuel :

-V, --version-sort
         natural sort of (version) numbers within text

Inconvénient: Lorsque nous émettons ls, les fichiers sont ensuite affichés dans une table avec autant de colonnes que nécessaire. sur l'écran actuel (comme vous l'avez montré dans votre message). Mais lorsque ls remarque que sa sortie est redirigée vers un fichier ou un tuyau (comme dans ls | sort), ls imprime les fichiers dans la colonne car , car il part du principe que la sortie est être traité ligne par ligne (ou fichier par fichier) par un autre programme (comme sort). Ainsi, la sortie de ls | sort -V sera dans une colonne plutôt que dans une table à plusieurs colonnes. Voir @ vijay est simple mais réponse parfaite pour savoir comment l'éviter.

6
PerlDuck