Comment trier la sortie de `ls`?

14

Est-il possible de visualiser 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
alhelal
la source
3
Le titre devrait être plus précis car il ressemble à un doublon (ce qui pourrait être de toute façon).
Peter Mortensen

Réponses:

31

Utilisez le commutateur -v [sorte naturelle de (version) numéros dans le texte]

ls -v
Vijay
la source
Si vous voulez une seule colonne, utilisez ls -1v
Vijay
13

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

Trier les entrées par ordre alphabétique si aucun de -cftuvSUX ni --sort n'est spécifié.

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

Option 1 - lsTrier les commutateurs

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

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

Dans votre cas, vous voulez trier "version" (-v). Soyez prudent, car cela triera également tout ce qui a un blahblah-X.Y.Z-Aarrangement qui peut ne pas être entièrement ce que vous voulez. Voir aussi l'explication de GNU sur le tri des versions .

Option 2 - Canalisations pour les commandes de tri

Vous pourriez utiliser un tuyau | pour envoyer la sortie vers une autre commande, par exemple la commande sort que vous pouvez utiliser pour trier de plusieurs autres manières, comme celle ls -1 | sort -nqui est utile si vous avez des fichiers numérotés. Le -1commutateur garantit que la sortie est une ligne par fichier.

De même, vous pouvez manipuler la sortie pour faciliter le tri en utilisant des choses comme sedou awk.

Il existe de nombreuses façons de répondre à ce type de * question. Un tutoriel sur le shell Linux peut vous être utile.

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

tu-Reinstate Monica-dor duh
la source
6

Comme déjà souligné dans un commentaire, la sortie est déjà triée, mais par caractères, pas par nombres. Vous pouvez redirigez la sortie à lstravers sortlaquelle a un interrupteur pour trier par nombre dans les chaînes:

ls | sort --version-sort

Depuis la page de manuel :

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

Inconvénient: lorsque nous émettons, lsil génère les fichiers dans un tableau avec autant de colonnes que possible sur l'écran actuel (tout comme vous l'avez montré dans votre message). Mais lorsque vous lsremarquez que sa sortie est redirigée vers un fichier ou vers un canal (comme dans ls | sort), puis lsimprime les fichiers dans une seule colonne car il suppose alors que la sortie doit être traitée ligne par ligne (aka fichier par fichier) par un autre programme (comme sort). Ainsi, la sortie de ls | sort -Vsera dans une colonne au lieu d'un tableau à plusieurs colonnes. Voir la réponse simple mais parfaite de @vijay pour savoir comment éviter cela.

PerlDuck
la source
1
Vous pouvez également diriger la sortie verscolumn
David Conrad
0

ls -l : liste les fichiers du répertoire verticalement mais pas dans un ordre particulier.

ls -l | sort -k 3: -k 3trierait la sortie de la commande précédente par la 3ème colonne.

AB01
la source