'Ls' Unix diurutkan berdasarkan nama


127

Bisakah Anda mengurutkan daftar ls berdasarkan nama?


10
Jika tidak diurutkan berdasarkan nama tanpa argumen apa pun, Anda mungkin ingin memeriksa apakah ls telah alias ke sesuatu yang lain, atau cukup panggil menggunakan jalur lengkap yang akan menghilangkan alias apa pun yang ada.
tvanfosson

gnu-coreutils ls mengurutkan secara default. Sistem apa yang Anda gunakan (seperti yang ditanyakan orang lain)
Nick Fortescue

Apakah Anda yakin meminta untuk mengurutkan berdasarkan nama dan bukan berdasarkan jenis (mis. Direktori terlebih dahulu kemudian file) ??
Curtisk

Huruf besar muncul sebelum huruf kecil, jadi file Z muncul sebelum file a ... bagaimana cara memperbaikinya?
ArtOfWarfare

halaman manual mengatakan 'diurutkan secara terpisah dan dalam urutan leksikografis'. File diurutkan menurut karakter pertama: numerik [0..9] dan karakter UPPER [A..Z] dan karakter lowe [a..z]
Gürol Canbek

Jawaban:


131

Ls saya mengurutkan berdasarkan nama secara default. Apa yang kamu lihat?

man ls menyatakan:

List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.:


lstidak menyortir jika -c1ditentukan: apakah ada cara untuk melakukannya? ( --sort=namesepertinya tidak bekerja)
dhc

1
Itu tidak benar. dengan ls -la, saya melihat .bashrc - can - .config - Downloads - .local - tmp.bashrc - .config - .local - Downloads - can - tmp
:,

1
milik saya mengatakan 100.jpg datang sebelum 10.jpg. Masuk akal saya rasa jika "0" datang sebelum "." tapi masih belum intuitif
chiliNUT

Saya melihat "M" sebelum "b". Bingung. Tunggu, apakah kapitalisasi itu penting?
Daniel Springer

106

Untuk sesuatu yang sederhana, Anda dapat menggabungkan ls dengan sort . Untuk hanya daftar nama file:
ls -1 | menyortir

Untuk mengurutkannya dalam urutan terbalik:
ls -1 | sort -r


3
Apakah ada cara untuk mengurutkan file seperti ini: ls | sort -n 1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; Seperti yang Anda lihat 2.10.15 sebelum 2.10.2 .
BBK

Saya melakukan beberapa pengembangan android pada perangkat Pidion, dan ls tidak otomatis menyortir, jadi ini sangat membantu! Satu-satunya masalah adalah sepertinya itu memilah tautan lunak tetapi tidak menyortir file, karena alasan tertentu
Mitch

Di Mac, sepertinya perintah kedua itu bisa disingkat menjadi ls -1r .
Ash Ryan Arnwine

4
@BBK sort -V akan mengurutkan berdasarkan nomor versi, sehingga Anda mendapatkan .. 2.10.2; 2.10.15; .. from man sort .. --sort = WORD akan mengurutkan menurut WORD: general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V
mosh

35

lsdari coreutilsmelakukan sadar-lokal pengurutan secara default, dan dengan demikian dapat menghasilkan hasil yang mengejutkan dalam beberapa kasus (misalnya, %fooakan mengurutkan antara bardan quuxdalam LANG=en_US). Jika Anda menginginkan jenis ASCIIbetical, gunakan

LANG=C ls

LANGJika perilaku semacam itu, posting ini banyak membantu saya!
yurenchen

Ini juga berhasil untuk saya. Bisakah Anda menjelaskan hal ini? Mengapa ini diurutkan secara berbeda?
Kostas

1
Dosis ini berfungsi, tetapi keluaran ?untuk setiap karakter non-ascii ketika keluarannya adalah terminal (fitur buruk dari ls lakukan periksa apakah itu keluaran ke terminal, berfungsi saat pemipaan). Anda dapat "memperbaiki" ini dengan piping to cat, menggunakan C.UTF-8lokal (jika sistem Anda mendukungnya) dan / atau menggunakan -bflag. Bahkan lebih baik, jangan gunakan lssama sekali, lebih baik gunakan `
12431234123412341234123

Ini membantu saya menemukan bahwa bagi saya, masalahnya adalah bahwa beberapa nama file saya berisi tanda hubung (-), dan beberapa tanda hubung en (-). lsmengurutkan tanda hubung sebelum tanda hubung en.
Jamy Mahabier

17

Keindahan alat * nix adalah Anda dapat menggabungkannya:

ls -l | sort -k9,9

Outputnya ls -lakan terlihat seperti ini

-rw-rw-r-- 1 luckydonald luckydonald  532 Feb 21  2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt

Jadi dengan 9,9Anda mengurutkan kolom 9ke kolom 9, menjadi nama file. Anda harus memberikan tempat berhenti, yang merupakan kolom yang sama dalam kasus ini. Kolom dimulai dengan 1.

Juga, jika Anda ingin mengabaikan huruf besar / kecil, tambahkan --ignore-caseke perintah sortir.


1
Apa -k9,9maksudnya
luckydonald

Mengetahui, itu berarti mengurutkan kolom 9ke kolom yang sama 9. lsKeluaran normal terlihat seperti ini drwx------ 8 999 user 4.0K Feb 5 2017 file.txt:, jadi kolom 9 adalah nama file. Jika Anda ingin mengabaikan case, gunakan --ignore-caseon sort.
luckydonald

8

PEMBERITAHUAN: "a" muncul SETELAH "Z":

$ sentuh A.txt aa.txt Z.txt

$ ls

A.txt Z.txt aa.txt


3
Ini tidak selalu benar. Saya tidak tahu persis keadaan yang membuat ini tidak benar, tetapi pada mesin saya yang menjalankan Ubuntu 12.04, output ls diurutkan menurut abjad (mengabaikan case).
Patrick James McDougle

Tangkapan yang bagus! Sepertinya memesan berdasarkan kode ASCII .. Huruf besar diikuti dengan huruf kecil ..
Kent Pawar

1
Saya perhatikan bahwa MacOS saya mengurutkan angka pertama, lalu huruf besar, lalu garis bawah dan kemudian huruf kecil. Lucu bahwa mereka tidak peka huruf besar / kecil. Di sisi lain, Debian saya peka huruf besar / kecil tetapi tidak menyortir huruf-huruf kecuali ada seri, maka huruf kecil menang! Contoh: ABA.txt ABb.txt aBC.txt AbC.txt ABc.txt
zk82

Saya menggunakan MAC juga. saya kecewa melihat penyortiran tipe A, Z, a, z. Saya di sini karena saya lebih suka A, a, Z, a. terima kasih atas tip Anda. akan mencoba normalsolusi di sini.
nyxee

8

File yang berbeda hanya dengan string numerik dapat diurutkan pada nomor ini dengan syarat diawali dengan pemisah.

Dalam kasus ini, sintaks berikut dapat digunakan:

ls -x1 file | sort -t'<char>' -n -k2

Contoh:

ls -1 TRA*log | sort -t'_' -n -k2

TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log

4

Dari halaman manual (untuk bash ls):

Urutkan entri menurut abjad jika tidak ada -cftuSUX atau --sort.


3
Tidak ada "bash ls". Lakukan "yang ls"
Norbert Hartl

@Norbert: Anda benar, tetapi which lsakan berhasil bahkan jika bash memiliki builtin ls. Sebaliknya, lakukan builtin lsdi bash, dan dapatkan error.
Pianosaurus

4
@ Norbert: whichselalu mengembalikan jalur. Gunakan type lsuntuk menentukan apa yang dipikirkan shell ls(bawaan, fungsi, dapat dieksekusi).
ephemient

3

The lsutilitas harus sesuai dengan IEEE Std 1.003,1-2.001 ( POSIX.1) yang menyatakan:

22027: itu akan mengurutkan operan direktori dan non-direktori secara terpisah sesuai dengan urutan penyusunan di lokal saat ini.

26027: Secara default, formatnya tidak ditentukan, tetapi outputnya harus diurutkan menurut abjad berdasarkan nama simbol:

  • Nama perpustakaan atau objek, jika −A ditentukan
  • Nama simbol
  • Jenis simbol
  • Nilai simbol
  • Ukuran yang terkait dengan simbol, jika ada


2

ls -X berfungsi untuk tujuan itu, jika Anda memiliki alias ls ke default yang lebih berguna.


0
In Debian Jessie, this works nice:

ls -lah --group-directories-first

# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha

# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.