Come ordinare l'output di `ls`?


14

È possibile visualizzare questo output ordinato con titlepage_1.pdf prima di 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

3
Il titolo dovrebbe essere più specifico in quanto sembra un duplicato (che potrebbe essere comunque).
Peter Mortensen,

Risposte:


31

Utilizzare l'opzione -v [ordinamento naturale di numeri (versione) all'interno del testo]

ls -v

Se vuoi una singola colonna usa ls -1v
Vijay

13

L'output è ordinato. Secondo la lsmanpage:

Ordina le voci in ordine alfabetico se non viene specificato nessuno di -cftuvSUX né --sort.

Ma se vuoi andare oltre, hai almeno due opzioni:

Opzione 1: lsordina gli interruttori

man lsti dice una serie di opzioni che puoi usare per ordinare, in particolare, la pagina man ls dice:

nessuno (-U), dimensioni (-S), tempo (-t), versione (-v), estensione (-X)

Nel tuo caso, vuoi "version" sort (-v). Fai attenzione, tuttavia, poiché questo ordinerà anche tutto ciò che ha un blahblah-X.Y.Z-Aaccordo che potrebbe non essere del tutto quello che desideri. Vedi anche la spiegazione di GNU sul tipo di versione .

Opzione 2 - Tubi per i comandi di ordinamento

È possibile utilizzare una pipe |per inviare l'output a un altro comando, ad esempio il comando sort che è possibile utilizzare per ordinare in vari altri modi, come nel caso in ls -1 | sort -ncui sia utile disporre di file numerati. Lo -1switch assicura che l'output sia di una riga per file.

Allo stesso modo, puoi manipolare l'output per facilitare l'ordinamento usando cose come sedo awk.

Esistono molti modi per rispondere a questo tipo di * domanda. Potresti trovare utile un tutorial sulla shell di Linux.

* (Vedi cosa ho fatto lì? :-P)


6

Come già sottolineato in un commento, l'output è già ordinato, ma per caratteri, non per numeri. Potresti voler convogliare l'output di lsthrough sortche ha un interruttore per ordinare i numeri all'interno delle stringhe:

ls | sort --version-sort

Dalla manpage :

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

Unico inconveniente: quando pubblichiamo ls, genera i file in una tabella con tutte le colonne che rientrano nella schermata corrente (proprio come hai mostrato nel tuo post). Ma quando lsnota che il suo output viene reindirizzato su un file o su una pipe (come in ls | sort), lsstampa i file in una sola colonna perché presume che l'output debba essere elaborato riga per riga (ovvero file per file) da qualche altro programma (come sort). Quindi l' output di ls | sort -Vsarà in una colonna anziché in una tabella con più colonne. Vedi la risposta semplice ma perfetta di @vijay per come evitarlo.


1
È inoltre possibile reindirizzare l'output acolumn
David Conrad il

0

ls -l : elenca i file della directory in verticale ma non in un ordine particolare.

ls -l | sort -k 3: -k 3ordina l'output del comando precedente per la terza colonna.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.