Saya perlu mendapatkan daftar du keluaran yang dapat dibaca manusia.
Namun, du
tidak memiliki opsi "urutkan berdasarkan ukuran", dan perpipaan untuk sort
tidak berfungsi dengan bendera yang dapat dibaca manusia.
Misalnya, menjalankan:
du | sort -n -r
Menghasilkan penggunaan disk yang disortir berdasarkan ukuran (menurun):
du |sort -n -r
65108 .
61508 ./dir3
2056 ./dir4
1032 ./dir1
508 ./dir2
Namun, menjalankannya dengan bendera yang dapat dibaca manusia, tidak mengurutkan dengan benar:
du -h | sort -n -r
508K ./dir2
64M .
61M ./dir3
2.1M ./dir4
1.1M ./dir1
Adakah yang tahu cara menyortir du -h
berdasarkan ukuran?
du
tetapi menambahkan -h kesort
perintah. Anda dapat menambahkan-rh
sehingga yang terbesar adalah yang pertama di dalam file, jika tidak, Anda harustail
melihat space hogs.Jawaban:
Pada GNU coreutils 7.5 dirilis pada Agustus 2009,
sort
memungkinkan-h
parameter, yang memungkinkan sufiks numerik dari jenis yang dihasilkan olehdu -h
:Jika Anda menggunakan jenis yang tidak mendukung
-h
, Anda dapat menginstal GNU Coreutils. Misalnya pada Mac OS X yang lebih lama:Dari
sort
manual :-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)
sumber
du -BM | sort -nr
sebagai solusi - itu cukup mudah dibaca oleh manusia, dan disortir, jika ada yang terjebak dengan coreutil yang lebih tua.du -hs * | gsort -h
du -BM
mencetak semuanya dalam megabita, sehingga file yang 168K sebenarnya akan ditampilkan sebagai 0M. Kecuali ada beberapa perbedaan versi yang tidak saya sadari. Versi sayadu
hanya menunjukkan nilai megabyte integer.sumber
@Douglas Leeder, satu jawaban lagi: Urutkan output yang dapat dibaca manusia dari du -h menggunakan alat lain. Seperti Perl!
Bagi menjadi dua garis agar sesuai dengan tampilan. Anda dapat menggunakannya dengan cara ini atau menjadikannya one-liner, itu akan berfungsi baik.
Keluaran:
EDIT: Setelah beberapa putaran bermain golf di PerlMonks , hasil akhirnya adalah sebagai berikut:
sumber
stderr
karenadie
Anda dapat mengubahnya untuk membuatnya aktifstdout
?die
keprint
dan itu akan pergi kestdout
. Hanya dua karakter lagi.Ada alat yang sangat berguna yang saya gunakan yang disebut ncdu yang dirancang untuk menemukan folder dan file penggunaan disk yang sial, dan menghapusnya. Berbasis konsol, cepat dan ringan, dan memiliki paket pada semua distribusi utama.
sumber
du
, jika Anda hanya ingin mengidentifikasi direktori besar.sumber
du -k --total
, memberikan kesalahan pada akhirnyadu: cannot access 'total': No such file or directory
head
dengan menambahkan `| kepala -50` di akhir.Sejauh yang saya bisa lihat, Anda memiliki tiga opsi:
du
untuk mengurutkan sebelum tampilan.sort
untuk mendukung ukuran manusia untuk jenis numerik.Anda juga bisa melakukan
du -k
dan hidup dengan ukuran di KiB.Untuk opsi 3 Anda dapat menggunakan skrip berikut:
sumber
Saya juga punya masalah itu dan saat ini saya sedang menggunakan solusi:
Ini tidak akan menghasilkan nilai skala, tetapi selalu menghasilkan ukuran dalam megabyte. Itu kurang sempurna, tetapi bagi saya itu lebih baik daripada tidak sama sekali (atau menampilkan ukuran dalam byte).
sumber
Menemukan kiriman ini di tempat lain. Oleh karena itu, skrip shell ini akan melakukan apa yang Anda inginkan tanpa memanggil
du
semuanya dua kali. Ini digunakanawk
untuk mengkonversi byte mentah ke format yang dapat dibaca manusia. Tentu saja, formatnya sedikit berbeda (semuanya dicetak ke satu tempat desimal presisi).Menjalankan ini di
.vim
direktori saya menghasilkan:(Saya harap skema warna 3,6M tidak berlebihan.)
sumber
Versi ini digunakan
awk
untuk membuat kolom tambahan untuk mengurutkan kunci. Itu hanya memanggildu
satu kali. Outputnya akan terlihat persis sepertidu
.Saya telah membaginya menjadi beberapa baris, tetapi dapat dikombinasi ulang menjadi satu garis.
Penjelasan:
Cobalah tanpa
cut
perintah untuk melihat apa yang dilakukannya.Ini adalah versi yang melakukan pengurutan dalam skrip AWK dan tidak perlu
cut
:sumber
du -sh *
menunjukkan hanya file dan direktori langsung tanpa keturunan rekursif.Berikut adalah contoh yang menunjukkan direktori dalam bentuk ringkas yang diringkas. Ini menangani spasi di direktori / nama file.
sumber
urutkan file berdasarkan ukuran dalam MB
sumber
Saya punya pembungkus python yang sederhana namun bermanfaat untuk du yang disebut dutop . Perhatikan bahwa kami (pengelola coreutils) sedang mempertimbangkan untuk menambahkan fungsionalitas untuk mengurutkan untuk mengurutkan output "manusia" secara langsung.
sumber
sort
bendera baru )Dapatkan satu lagi:
Saya mulai menyukai perl. Anda mungkin harus melakukan
pertama. Untuk semua peretas perl di luar sana: Ya, saya tahu bahwa bagian semacam itu juga dapat dilakukan di perl. Mungkin bagian du juga.
sumber
Cuplikan ini tanpa malu-malu tersangkut dari 'Jean-Pierre' dari http://www.unix.com/shell-programming-scripting/32555-du-h-sort.html . Apakah ada cara agar saya bisa lebih menghargai dia?
sumber
23423423432423
Gunakan bendera "-g"
Dan pada direktori / usr / local saya menghasilkan output seperti ini:
sumber
Yang lainnya:
sumber
Berikut adalah metode sederhana yang saya gunakan, penggunaan sumber daya sangat rendah dan memberi Anda apa yang Anda butuhkan:
sumber
Menemukan ini online ... tampaknya berfungsi OK
sumber
Saya belajar awk dari meramu contoh ini kemarin. Butuh waktu, tetapi itu sangat menyenangkan, dan saya belajar cara menggunakan awk.
Ini hanya berjalan du sekali, dan memiliki output yang mirip dengan du -h
Ini menunjukkan angka di bawah 10 dengan satu titik desimal.
sumber
du -cka --max-depth = 1 / var / log | sort -rn | kepala -10 | awk '{print ($ 1) / 1024, "MB", $ 2'}
sumber
Jika Anda perlu menangani spasi, Anda dapat menggunakan yang berikut ini
Pernyataan sed tambahan akan membantu meringankan masalah dengan folder dengan nama seperti Dukungan Aplikasi
sumber
Voa:
sumber
http://dev.yorhel.nl/ncdu
perintah: ncdu
Navigasi direktori, pengurutan (nama dan ukuran), grafik, dapat dibaca manusia, dll ...
sumber
awk
Solusi lain -sumber
Saya telah menggunakan solusi yang disediakan oleh @ptman, tetapi perubahan server baru-baru ini membuatnya tidak lagi layak. Sebagai gantinya, saya menggunakan skrip bash berikut:
sumber
du -d 1
Sintaks BSD telah didukung oleh GNU du sejak coreutils 8.6 dirilis pada 2010 (meskipun ketersediaan Red Hat pertama adalah RHEL 7 pada 2014), jadi Anda tidak lagi membutuhkannya--maxdepth=1
. Saya sendiri baru tahu tentang ini.sumber
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.(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
dans/1024^2
untuk lebih terbaca-manusia). Di dalam kondisi awk, kami mengaturs
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).
sumber
Setidaknya dengan alat yang biasa, ini akan sulit karena format angka yang dapat dibaca manusia berada di (perhatikan bahwa semacam melakukan "pekerjaan yang baik" di sini karena mengurutkan angka - 508, 64, 61, 2, 2 - itu tidak bisa mengurutkan angka floating point dengan pengganda tambahan).
Saya akan mencobanya sebaliknya - gunakan output dari "du | sort -n -r" dan kemudian mengonversi angka ke format yang dapat dibaca manusia dengan beberapa skrip atau program.
sumber
Yang bisa Anda coba adalah:
Semoga itu bisa membantu.
sumber
xargs
sehingga formulir ini diperlukan. Namun untuk file dengan spasi di dalamnya, Anda perlu mengatur IFS:IFS=$'\n'
sumber