Ada banyak jawaban di sini, banyak di antaranya adalah duplikat. Saya melihat tiga tren: menyalurkan melalui panggilan kedua, menggunakan kode shell / awk yang rumit, dan menggunakan bahasa lain.
Berikut ini adalah solusi yang sesuai dengan POSIX menggunakan du dan awk yang seharusnya bekerja pada setiap sistem.
Saya telah mengambil pendekatan yang sedikit berbeda, menambahkan -x
untuk memastikan kita tetap pada sistem file yang sama (saya hanya perlu operasi ini ketika saya kekurangan ruang disk, jadi mengapa menyingkirkan hal-hal yang telah saya pasang di pohon FS ini atau pindah dan symlinked back?) dan menampilkan unit konstan untuk mempermudah penguraian visual. Dalam hal ini, saya biasanya memilih untuk tidak menyortir sehingga saya dapat melihat struktur hierarkis dengan lebih baik.
sudo du -x | awk '
$1 > 2^20 { s=$1; $1=""; printf "%7sG%s\n", sprintf("%.2f",s/2^21), $0 }'
(Karena ini dalam unit yang konsisten, Anda dapat menambahkan | sort -n
jika Anda benar-benar ingin mengurutkan hasil.)
Ini menyaring direktori mana pun yang kontennya (kumulatif) gagal melebihi 512MB dan kemudian menampilkan ukuran dalam gigabytes. Secara default, du menggunakan ukuran blok 512-byte (sehingga kondisi awk ini dari 2 20 blok adalah 512MB dan yang 2 21 pembagi mengkonversi unit untuk GB - kita bisa menggunakan du -kx
dengan $1 > 512*1024
dan s/1024^2
untuk lebih terbaca-manusia). Di dalam kondisi awk, kami mengatur s
ke ukuran sehingga kami dapat menghapusnya dari baris ( $0
). Ini mempertahankan pembatas (yang diciutkan ke satu ruang tunggal), sehingga final %s
mewakili ruang dan kemudian nama direktori gabungan. %7s
menyelaraskan %.2f
ukuran GB bulat (meningkat menjadi %8s
jika Anda memiliki> 10TB).
Tidak seperti kebanyakan solusi di sini, ini benar-benar mendukung direktori dengan spasi di namanya (meskipun setiap solusi, termasuk yang ini, akan salah menangani nama direktori yang berisi jeda baris).