Jak posortować wyjście `ls`?

14

Czy można wyświetlić to wyjście posortowane według titlepage_1.pdf przed 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
źródło
3
Tytuł powinien być bardziej szczegółowy, ponieważ wygląda jak duplikat (który i tak może być).
Peter Mortensen,

Odpowiedzi:

31

Użyj przełącznika -v [naturalny rodzaj liczb (wersji) w tekście]

ls -v
Vijay
źródło
Jeśli chcesz mieć jedną kolumnę, użyj ls -1v
Vijay
13

Dane wyjściowe są sortowane. Według strony lspodręcznika:

Sortuj wpisy alfabetycznie, jeśli nie podano żadnego z -cftuvSUX ani --sort.

Ale jeśli chcesz pójść dalej, masz co najmniej dwie opcje:

Opcja 1 - lssortuj przełączniki

man lsmówi ci o wielu przełącznikach, których możesz użyć do sortowania, w szczególności strona man ls mówi:

brak (-U), rozmiar (-S), czas (-t), wersja (-v), rozszerzenie (-X)

W twoim przypadku chcesz sortować „wersję” (-v). Bądź jednak ostrożny, ponieważ spowoduje to również posortowanie wszystkiego, co ma blahblah-X.Y.Z-Aukład, który może nie być dokładnie tym, czego chcesz. Zobacz także wyjaśnienie GNU dotyczące sortowania wersji .

Opcja 2 - potoki do poleceń sortujących

Możesz użyć potoku, |aby wysłać dane wyjściowe do innego polecenia, na przykład polecenia, sort którego możesz użyć do sortowania na wiele innych sposobów, ponieważ ls -1 | sort -njest to przydatne, jeśli masz numerowane pliki. Te -1, zapewnia przełącznik, który wyjście jest jedno-line-per-pliku.

Podobnie możesz manipulować danymi wyjściowymi, aby ułatwić sortowanie, używając rzeczy takich jak sedlub awk.

Istnieje wiele sposobów, aby odpowiedzieć na tego rodzaju * pytanie. Samouczek powłoki Linux może być pomocny.

* (Zobacz, co tam zrobiłem? :-P)

tu-Reinstate Monica-dor duh
źródło
6

Jak już wspomniano w komentarzu, dane wyjściowe już posortowane, ale według znaków, a nie liczb. Możesz przesłać dane wyjściowe, lsprzez sortktóre ma przełącznik do sortowania według liczb w łańcuchach:

ls | sort --version-sort

Z strony podręcznika :

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

Wada: kiedy wydajemy ls, wyświetla pliki w tabeli z tyloma kolumnami, ile zmieści się na bieżącym ekranie (tak jak pokazałeś w swoim poście). Ale gdy lszauważy, że dane wyjściowe są przekierowywane do pliku lub potoku (jak w ls | sort), lsdrukuje pliki w jednej kolumnie, ponieważ zakłada, że ​​dane wyjściowe mają być przetwarzane linia po linii (inaczej plik po pliku) przez jakiś inny program (jak sort). Tak więc wynik ls | sort -Vbędzie w jednej kolumnie zamiast w tabeli z wieloma kolumnami. Zobacz prostą, ale idealną odpowiedź @vijay, aby tego uniknąć.

PerlDuck
źródło
1
Możesz także przesłać dane wyjściowe docolumn
David Conrad,
0

ls -l : wyświetla pliki katalogu pionowo, ale nie w określonej kolejności.

ls -l | sort -k 3: -k 3posortuje dane wyjściowe poprzedniego polecenia według trzeciej kolumny.

AB01
źródło