Bagaimana cara mengurutkan output `ls`?

14

Apakah mungkin untuk melihat hasil ini diurutkan dengan titlepage_1.pdf sebelum 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
sumber
3
Judul seharusnya lebih spesifik karena terlihat seperti duplikat (yang mungkin saja).
Peter Mortensen

Jawaban:

31

Gunakan switch -v [nomor urut alami (versi) dalam teks]

ls -v
Vijay
sumber
Jika Anda ingin satu kolom, gunakan ls -1v
Vijay
13

Outputnya diurutkan. Menurut halaman lsmanual:

Urutkan entri secara alfabet jika tidak ada -cftuvSUX atau --sort ditentukan.

Tetapi jika Anda ingin melangkah lebih jauh, Anda memiliki setidaknya dua opsi:

Opsi 1 - lssortir sakelar

man lsmemberi tahu Anda tentang sejumlah sakelar yang dapat Anda gunakan untuk mengurutkan, khususnya, halaman manual mengatakan:

tidak ada (-U), ukuran (-S), waktu (-t), versi (-v), ekstensi (-X)

Dalam kasus Anda, Anda ingin sortir "versi" (-v). Berhati-hatilah, karena ini juga akan mengurutkan apa pun yang memiliki blahblah-X.Y.Z-Apengaturan yang mungkin tidak sepenuhnya seperti yang Anda inginkan. Lihat juga penjelasan GNU tentang pengurutan versi .

Opsi 2 - Pipa untuk menyortir perintah

Anda bisa menggunakan pipa |untuk mengirim output ke perintah lain, misalnya perintah sort yang bisa Anda gunakan untuk mengurutkan dalam beberapa cara lain, seperti ls -1 | sort -nyang berguna jika Anda memiliki file bernomor. The -1beralih memastikan bahwa output adalah satu-line-per-file.

Sama, Anda dapat memanipulasi output untuk membantu menyortir dengan menggunakan hal-hal seperti sedatau awk.

Ada banyak cara untuk menjawab pertanyaan semacam ini. Anda dapat menemukan tutorial shell linux bermanfaat.

* (Lihat apa yang saya lakukan di sana? :-P)

tu-Reinstate Monica-dor duh
sumber
6

Seperti telah ditunjukkan dalam komentar, output yang sudah diurutkan, tetapi dengan karakter, bukan angka. Anda mungkin ingin menyalurkan output lsmelalui sortyang memiliki saklar untuk mengurutkan berdasarkan angka dalam string:

ls | sort --version-sort

Dari halaman manual :

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

Kelemahan: Ketika kami mengeluarkannya, lsmaka output file dalam tabel dengan kolom sebanyak yang sesuai pada layar saat ini (seperti yang Anda tunjukkan di posting Anda). Tetapi ketika lspemberitahuan bahwa outputnya dialihkan ke file atau ke pipa (seperti dalam ls | sort) kemudian lsmencetak file hanya dalam satu kolom karena kemudian mengasumsikan output akan diproses baris demi baris (alias file demi file) oleh beberapa program lain (seperti sort). Jadi output ls | sort -Vakan berada dalam satu kolom, bukan dalam tabel dengan beberapa kolom. Lihat @vijay sederhana 's namun jawaban yang sempurna untuk bagaimana untuk menghindari itu.

PerlDuck
sumber
1
Anda juga dapat menyalurkan output kecolumn
David Conrad
0

ls -l : daftar file direktori secara vertikal tetapi tidak dalam urutan tertentu.

ls -l | sort -k 3: -k 3akan mengurutkan output dari perintah sebelumnya dengan kolom ke-3.

AB01
sumber