Jika Anda ingin mengurutkan dalam urutan terbalik , cukup tambahkan -rsakelar.
Memperbarui:
Untuk mengecualikan direktori (dan asalkan tidak ada nama file atau target symlink yang mengandung karakter baris baru):
ls -lS | grep -v '^d'
Pembaruan 2:
Saya melihat sekarang bagaimana ia masih menunjukkan tautan simbolis, yang bisa berupa folder. Tautan simbolik selalu dimulai dengan huruf l, seperti pada tautan.
Ubah perintah untuk memfilter untuk a -. Ini seharusnya hanya meninggalkan file biasa:
ls -lS | grep '^-'
Di sistem saya ini hanya menampilkan file biasa.
pembaruan 3:
Untuk menambahkan rekursi, saya akan meninggalkan penyortiran baris ke sortperintah dan menyuruhnya menggunakan kolom ke-5 untuk disortir.
ls -lR | grep '^-' | sort -k 5 -rn
-rnartinya Balik dan numerik untuk mendapatkan file terbesar di atas. Sisi bawah dari perintah ini adalah tidak menunjukkan path lengkap file.
Jika Anda benar-benar membutuhkan path lengkap file, gunakan sesuatu seperti ini:
find . -type f -exec du -h {} + | sort -r -h
The findperintah rekursif akan menemukan semua file dalam semua sub direktori dari .dan panggilan du -h(yang berarti penggunaan disk -humanreadable ) dan kemudian mengurutkan output lagi. Jika find/ sortAnda tidak mendukung -h, ganti dengan du -kdan sort -rn. Perhatikan bahwa ukuran dan penggunaan disk bukanlah hal yang sama.
dumemberikan penggunaan disk yang berbeda dari ukuran file. Dengan (GNU) du -h, pengurutan numerik tidak akan berfungsi (Anda perlu -hopsi GNU untuk mengurutkan). xargs mengharapkan daftar kata-kata yang mungkin dikutip sebagai input sehingga tidak akan berfungsi jika nama file mengandung karakter kosong atau dikutip.
Stéphane Chazelas
1
Saya melihat bahwa -S tidak urutan ukuran menurun, bagaimana dengan urutan naik?
demongolem
3
Berikut @ StéphaneChazelas, ini bekerja untuk saya: find . -type f -print0 | xargs -0 du -h | sort -rh. Jika Anda hanya ingin mengatakan yang terbesar 30 file: find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30.
Anda dapat menggunakan sesuatu seperti temukan dan urutkan.
find . -type f -ls | sort -r -n -k7
( -lsopsi ini tidak standar tetapi ditemukan di banyak implementasi implementasi, tidak hanya GNU satu. Di GNU find dan lainnya, ia menampilkan sesuatu yang mirip ls -lidengan beberapa pengecualian, misalnya file dengan ACL tidak ditandai dengan +)
Jika nama file dapat berisi karakter baris baru, dengan GNU find dan GNU sort:
Ini mengasumsikan kolom "grup" (dari -l) tidak mengandung spasi apa pun (maka -k 7 parameter), tetapi belum tentu demikian.
kolistivra
1
kenapa tidak sekadar mencari ... -print0 | semacam -zk7rn0?
Andre de Miranda
10
Dengan zsh dan GNU ls:
ls -ldU -- **/*(.OL)
Di mana (.OL)adalah kualifikasi gumpal , .untuk memilih regular hanya file, OLuntuk membalikkan order by panjang (ukuran file, o untuk urutan menaik, Ountuk turun).
(perhatikan bahwa versi zsh yang lebih lama memiliki masalah dengan ukuran file lebih dari 2 ^ 32).
Beberapa sistem operasi memiliki batasan ukuran daftar argumen yang diteruskan ke suatu perintah. Dalam hal ini, Anda perlu:
autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
Jika Anda hanya ingin daftar file dan bukan output detail, lakukan saja:
print -rl -- **/*(.OL)
Jika Anda ingin menyertakan file tersembunyi (yang namanya dimulai dengan titik, kecuali .dan ..) dan mencari di direktori tersembunyi juga, tambahkan Dkualifikasi globbing:
apa yang .OLdilakukan? Apakah itu bagian dari perintah?
alpha_989
@ alpha_989, lihat edit
Stéphane Chazelas
Terima kasih atas penjelasannya, Stephane .. Namun, untuk beberapa alasan .. perintahnya tidak berfungsi pada workstation saya .. Saya menggunakan ls (GNU coreutils) 8.25dan zsh 5.1.1 (x86_64-ubuntu-linux-gnu). Apakah hanya berfungsi untuk versi lsdan tertentu zsh?
alpha_989
@ alpha_989, dengan cara apa itu tidak berhasil untuk Anda? Ini berfungsi untuk saya dengan versi yang sama dan tidak ada dalam kode yang tidak akan berfungsi dalam versi dari 15 tahun yang lalu setidaknya.
Stéphane Chazelas
9
Daftar file menurut ukuran yang naik adalah:
ls -lSr
Opsinya adalah:
l: panjang, menunjukkan rincian pengguna, grup, atribut lainnya, tanggal, dll.
S: daftar pesanan berdasarkan ukuran (turun secara default)
Maukah Anda menjelaskan opsi untuk meningkatkan kualitas jawaban?
Rui F Ribeiro
6
Mengatakan bahwa "file-file itu dapat hadir di mana saja dalam folder tertentu" menyiratkan bahwa Anda ingin secara rekursif turun semua direktori (folder) dalam direktori awal (folder). Inilah yang finddimaksudkan untuk dilakukan:
find . -type f -exec ls -lSd {} +
Ini "menemukan" semua file di direktori kerja saat ini ( .). Untuk setiap file yang ditemukan, lsproses dijalankan untuk mengurutkan objek yang ditemukan dalam urutan ukuran. The +terminator ke -execpenyebab beberapa argumen akan disahkan sebagai daftar ke ls. Kecuali jika direktori Anda (folder) berisi sejumlah besar file, Anda harus memiliki satu daftar (dan dengan demikian satu proses bercabang), mengarah ke hasil yang Anda inginkan.
+1 untuk menggunakan flag -h untuk output ramah-manusia.
computingfreak
2
Saya menulis sesuatu sejauh ini beberapa waktu lalu. Anda bisa memberikan argumen untuk menentukan berapa banyak file yang harus didaftar, atau cukup ketik big, dalam hal apa Anda mendapatkan 10.
big () {
NUM_FILES=10;
if [ $1 ]; then
NUM_FILES=$1;
fi;
du | sort -nr | head -n $NUM_FILES
}
Sebagai variasi dari pertanyaan awal, jika Anda ingin melihat ukuran kumulatif file dalam subdirektori:
#!/bin/bash
find ${1:-.}-maxdepth 1-type d -exec du -sm {} \; | sort -nr
Ukuran akan ditampilkan dalam Megabytes ( mdalam du -sm). Nilai lain yang diterima oleh duadalah -kuntuk kilobyte, -guntuk gigabyte. Penggunaan -huntuk tampilan yang dapat dibaca manusia tidak dimungkinkan karena akan merusak penyortiran.
Berikut adalah versi yang digunakan seduntuk menambahkan Muntuk megabyte:
find ${1:-.}-maxdepth 1-type d -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'
Direktori untuk ditampilkan diatur melalui ${1:-.}yang akan menggunakan argumen baris perintah pertama jika disediakan, atau menggunakan direktori saat ini jika dipanggil tanpa argumen.
CATATAN: Ini bisa memakan waktu lama dengan banyak file. Opsi -type dhanya akan mendaftar subdirektori dan mengecualikan file dalam folder saat ini; jika Anda juga ingin melihat file di folder saat ini kemudian hapus.
Catatan: Anda mungkin ingin menggunakan ncduyang tersedia di sebagian besar repo linux (di ubuntu / debian apt install ncdu) dan juga di osx ( brew install ncdu).
man ls
:-S sort by file size
Jawaban:
Cukup gunakan sesuatu seperti:
Capital S .
Ini akan mengurutkan file berdasarkan ukuran.
Lihat juga:
man ls
Jika Anda ingin mengurutkan dalam urutan terbalik , cukup tambahkan
-r
sakelar.Memperbarui:
Untuk mengecualikan direktori (dan asalkan tidak ada nama file atau target symlink yang mengandung karakter baris baru):
Pembaruan 2:
Saya melihat sekarang bagaimana ia masih menunjukkan tautan simbolis, yang bisa berupa folder. Tautan simbolik selalu dimulai dengan huruf l, seperti pada tautan.
Ubah perintah untuk memfilter untuk a
-
. Ini seharusnya hanya meninggalkan file biasa:Di sistem saya ini hanya menampilkan file biasa.
pembaruan 3:
Untuk menambahkan rekursi, saya akan meninggalkan penyortiran baris ke
sort
perintah dan menyuruhnya menggunakan kolom ke-5 untuk disortir.-rn
artinya Balik dan numerik untuk mendapatkan file terbesar di atas. Sisi bawah dari perintah ini adalah tidak menunjukkan path lengkap file.Jika Anda benar-benar membutuhkan path lengkap file, gunakan sesuatu seperti ini:
The
find
perintah rekursif akan menemukan semua file dalam semua sub direktori dari.
dan panggilandu -h
(yang berarti penggunaan disk -humanreadable ) dan kemudian mengurutkan output lagi. Jikafind
/sort
Anda tidak mendukung-h
, ganti dengandu -k
dansort -rn
. Perhatikan bahwa ukuran dan penggunaan disk bukanlah hal yang sama.sumber
du
memberikan penggunaan disk yang berbeda dari ukuran file. Dengan (GNU)du -h
, pengurutan numerik tidak akan berfungsi (Anda perlu-h
opsi GNU untuk mengurutkan). xargs mengharapkan daftar kata-kata yang mungkin dikutip sebagai input sehingga tidak akan berfungsi jika nama file mengandung karakter kosong atau dikutip.find . -type f -print0 | xargs -0 du -h | sort -rh
. Jika Anda hanya ingin mengatakan yang terbesar 30 file:find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30
.+ |
sintaksisnya+ | sort -r -h
?Anda dapat menggunakan sesuatu seperti temukan dan urutkan.
(
-ls
opsi ini tidak standar tetapi ditemukan di banyak implementasi implementasi, tidak hanya GNU satu. Di GNU find dan lainnya, ia menampilkan sesuatu yang miripls -li
dengan beberapa pengecualian, misalnya file dengan ACL tidak ditandai dengan +)Jika nama file dapat berisi karakter baris baru, dengan GNU find dan GNU sort:
sumber
Dengan zsh dan GNU ls:
Di mana
(.OL)
adalah kualifikasi gumpal ,.
untuk memilih regular hanya file,OL
untuk membalikkan order by panjang (ukuran file,o
untuk urutan menaik,O
untuk turun).(perhatikan bahwa versi zsh yang lebih lama memiliki masalah dengan ukuran file lebih dari 2 ^ 32).
Beberapa sistem operasi memiliki batasan ukuran daftar argumen yang diteruskan ke suatu perintah. Dalam hal ini, Anda perlu:
Jika Anda hanya ingin daftar file dan bukan output detail, lakukan saja:
Jika Anda ingin menyertakan file tersembunyi (yang namanya dimulai dengan titik, kecuali
.
dan..
) dan mencari di direktori tersembunyi juga, tambahkanD
kualifikasi globbing:sumber
.OL
dilakukan? Apakah itu bagian dari perintah?ls (GNU coreutils) 8.25
danzsh 5.1.1 (x86_64-ubuntu-linux-gnu)
. Apakah hanya berfungsi untuk versils
dan tertentuzsh
?Daftar file menurut ukuran yang naik adalah:
Opsinya adalah:
sumber
Mengatakan bahwa "file-file itu dapat hadir di mana saja dalam folder tertentu" menyiratkan bahwa Anda ingin secara rekursif turun semua direktori (folder) dalam direktori awal (folder). Inilah yang
find
dimaksudkan untuk dilakukan:Ini "menemukan" semua file di direktori kerja saat ini (
.
). Untuk setiap file yang ditemukan,ls
proses dijalankan untuk mengurutkan objek yang ditemukan dalam urutan ukuran. The+
terminator ke-exec
penyebab beberapa argumen akan disahkan sebagai daftar kels
. Kecuali jika direktori Anda (folder) berisi sejumlah besar file, Anda harus memiliki satu daftar (dan dengan demikian satu proses bercabang), mengarah ke hasil yang Anda inginkan.sumber
Tampilan daftar file dalam urutan terbalik:
ls -lSrh
Untuk pesanan naik:
ls -lSh
sumber
Saya menulis sesuatu sejauh ini beberapa waktu lalu. Anda bisa memberikan argumen untuk menentukan berapa banyak file yang harus didaftar, atau cukup ketik
big
, dalam hal apa Anda mendapatkan 10.sumber
Coba ini, ini berfungsi baik untuk saya.
$ find /home/san -type f -printf '%s %p\n'| sort -nr | head -n 10
# find /root -type f -exec ls -lS {} + | head -n 10 | awk '{ print $5, $9 }'
Meskipun tidak jawaban yang sempurna tetapi bekerja sampai batas tertentu
sumber
sed
untuk memangkas outputMenambahkan ke jawaban delh dan komentar Stéphane Chazelas ...
find -print0
dikombinasikan denganxargs -0
menambahkan dukungan untuk blanks / spasi / whatnots.du -h | sort -rn
tidak mengurutkan dengan benar antara beberapa byte yang berbeda, misalnya 1.1M akan muncul setelah 128K, yang salahsort -rh
(--human-numeric-sort) menangani itu, tetapi hanya berfungsi pada versi GNU.Perintah di bawah ini akan memberikan output yang diinginkan.
Dapat dibaca oleh manusia, di GNU's sort / Linux:
find . -type f -print0 | xargs -0 du -h | sort -rh
Dalam satuan kilobyte, pada BSD / OSX / lainnya:
find . -type f -print0 | xargs -0 du -k | sort -rn
Untuk BSD / OSX, juga melihat https://unix.stackexchange.com/a/188375/82895 .
sumber
Sebagai variasi dari pertanyaan awal, jika Anda ingin melihat ukuran kumulatif file dalam subdirektori:
Ukuran akan ditampilkan dalam Megabytes (
m
dalamdu -sm
). Nilai lain yang diterima olehdu
adalah-k
untuk kilobyte,-g
untuk gigabyte. Penggunaan-h
untuk tampilan yang dapat dibaca manusia tidak dimungkinkan karena akan merusak penyortiran.Berikut adalah versi yang digunakan
sed
untuk menambahkanM
untuk megabyte:Direktori untuk ditampilkan diatur melalui
${1:-.}
yang akan menggunakan argumen baris perintah pertama jika disediakan, atau menggunakan direktori saat ini jika dipanggil tanpa argumen.CATATAN: Ini bisa memakan waktu lama dengan banyak file. Opsi
-type d
hanya akan mendaftar subdirektori dan mengecualikan file dalam folder saat ini; jika Anda juga ingin melihat file di folder saat ini kemudian hapus.sumber