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 -r
sakelar.
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 sort
perintah dan menyuruhnya menggunakan kolom ke-5 untuk disortir.
ls -lR | grep '^-' | sort -k 5 -rn
-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:
find . -type f -exec du -h {} + | sort -r -h
The find
perintah 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
/ sort
Anda tidak mendukung -h
, ganti dengan du -k
dan sort -rn
. Perhatikan bahwa ukuran dan penggunaan disk bukanlah hal yang sama.
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.
find . -type f -ls | sort -r -n -k7
( -ls
opsi ini tidak standar tetapi ditemukan di banyak implementasi implementasi, tidak hanya GNU satu. Di GNU find dan lainnya, ia menampilkan sesuatu yang mirip ls -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:
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, 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:
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 D
kualifikasi globbing:
print -rl -- **/*(.DOL)
.OL
dilakukan? Apakah itu bagian dari perintah?
ls (GNU coreutils) 8.25
dan zsh 5.1.1 (x86_64-ubuntu-linux-gnu)
. Apakah hanya berfungsi untuk versi ls
dan 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 find
dimaksudkan untuk dilakukan:
find . -type f -exec ls -lSd {} +
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 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
sed
untuk memangkas output
Menambahkan ke jawaban delh dan komentar Stéphane Chazelas ...
find -print0
dikombinasikan dengan xargs -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 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 ( m
dalam du -sm
). Nilai lain yang diterima oleh du
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 menambahkan M
untuk 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 d
hanya 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
ncdu
yang tersedia di sebagian besar repo linux (di ubuntu / debianapt install ncdu
) dan juga di osx (brew install ncdu
).