Bisakah Anda mengurutkan daftar ls berdasarkan nama?
Bisakah Anda mengurutkan daftar ls berdasarkan nama?
Jawaban:
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)
ls -la, saya melihat .bashrc - can - .config - Downloads - .local - tmp.bashrc - .config - .local - Downloads - can - tmp
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
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 .
ls -1r .
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!
?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 `
lsmengurutkan tanda hubung sebelum tanda hubung en.
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.
-k9,9maksudnya
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.
PEMBERITAHUAN: "a" muncul SETELAH "Z":
$ sentuh A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
normalsolusi di sini.
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
Dari halaman manual (untuk bash ls):
Urutkan entri menurut abjad jika tidak ada -cftuSUX atau --sort.
which lsakan berhasil bahkan jika bash memiliki builtin ls. Sebaliknya, lakukan builtin lsdi bash, dan dapatkan error.
whichselalu mengembalikan jalur. Gunakan type lsuntuk menentukan apa yang dipikirkan shell ls(bawaan, fungsi, dapat dieksekusi).
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
Periksa .bashrcfile Anda untuk mencari alias.
aliasuntuk memeriksa semua alias saat ini.
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 --