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.
:
ls
tidak menyortir jika -c1
ditentukan: apakah ada cara untuk melakukannya? ( --sort=name
sepertinya 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
.
ls
dari coreutils
melakukan sadar-lokal pengurutan secara default, dan dengan demikian dapat menghasilkan hasil yang mengejutkan dalam beberapa kasus (misalnya, %foo
akan mengurutkan antara bar
dan quux
dalam LANG=en_US
). Jika Anda menginginkan jenis ASCIIbetical, gunakan
LANG=C ls
LANG
Jika 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-8
lokal (jika sistem Anda mendukungnya) dan / atau menggunakan -b
flag. Bahkan lebih baik, jangan gunakan ls
sama sekali, lebih baik gunakan `
ls
mengurutkan tanda hubung sebelum tanda hubung en.
Keindahan alat * nix adalah Anda dapat menggabungkannya:
ls -l | sort -k9,9
Outputnya ls -l
akan 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,9
Anda mengurutkan kolom 9
ke 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-case
ke perintah sortir.
-k9,9
maksudnya
9
ke kolom yang sama 9
. ls
Keluaran 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-case
on sort.
PEMBERITAHUAN: "a" muncul SETELAH "Z":
$ sentuh A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
normal
solusi 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 ls
akan berhasil bahkan jika bash memiliki builtin ls. Sebaliknya, lakukan builtin ls
di bash, dan dapatkan error.
which
selalu mengembalikan jalur. Gunakan type ls
untuk menentukan apa yang dipikirkan shell ls
(bawaan, fungsi, dapat dieksekusi).
The ls
utilitas 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 .bashrc
file Anda untuk mencari alias.
alias
untuk 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 --