Saya ingin membuat daftar semua file dalam urutan besar ke kecil dan file-file itu dapat hadir di mana saja dalam folder tertentu.
man ls:-S sort by file size
Saya ingin membuat daftar semua file dalam urutan besar ke kecil dan file-file itu dapat hadir di mana saja dalam folder tertentu.
man ls:-S sort by file size
Jawaban:
Cukup gunakan sesuatu seperti:
ls -lS /path/to/folder/
Capital S .
Ini akan mengurutkan file berdasarkan ukuran.
Lihat juga:
-S sort by file size
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.
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.
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:
find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
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:
print -rl -- **/*(.DOL)
.OLdilakukan? Apakah itu bagian dari perintah?
ls (GNU coreutils) 8.25dan zsh 5.1.1 (x86_64-ubuntu-linux-gnu). Apakah hanya berfungsi untuk versi lsdan tertentu zsh?
Daftar file menurut ukuran yang naik adalah:
ls -lSr
Opsinya adalah:
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.
Tampilan daftar file dalam urutan terbalik: ls -lSrh
Untuk pesanan naik: ls -lSh
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
}
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
$ ls -lS |grep '^-' | head -n 6
seduntuk memangkas output
Menambahkan ke jawaban delh dan komentar Stéphane Chazelas ...
find -print0dikombinasikan dengan xargs -0menambahkan 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 salah
sort -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 .
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 / debianapt install ncdu) dan juga di osx (brew install ncdu).