Pertanyaan Bagaimana cara mendapatkan ukuran direktori diringkas dan subdirektorinya?


Katakanlah saya ingin mendapatkan ukuran setiap direktori dari sistem file Linux. Ketika saya menggunakan ls -la Saya tidak benar-benar mendapatkan ukuran folder yang diringkas.

Jika saya gunakan df Saya mendapatkan ukuran dari setiap sistem file yang di-mount tetapi itu juga tidak membantu saya. Dan dengan du Saya mendapatkan ukuran masing-masing subdirektori dan ringkasan seluruh sistem file.

Tapi saya ingin hanya memiliki ukuran ringkasan dari setiap direktori di dalam folder ROOT dari sistem file. Apakah ada perintah untuk mencapainya?


259
2017-07-11 17:26


asal


Itu --total Bendera sangat membantu saya. Misalnya. du -sh --total applications/*. askubuntu.com/a/465436/48214 - Ryan


Jawaban:


Ini melakukan apa yang Anda cari:

du -sh /*

Apa artinya ini:

  • -s untuk memberikan hanya total untuk setiap argumen baris perintah.
  • -h untuk suffix yang bisa dibaca manusia M untuk megabyte dan G untuk gigabyte (opsional).
  • /* hanya memperluas ke semua direktori (dan file) di /.

    Catatan: dotfiles tidak termasuk; menjalankan shopt -s dotglob untuk memasukkan mereka juga.

Juga berguna menyortir berdasarkan ukuran:

du -sh /* | sort -h

Sini:

  • -h memastikan itu sort menafsirkan sufiks yang dapat dibaca manusia dengan benar.

367
2017-07-11 17:28



Jika Anda memiliki direktori-titik di direktori root, Anda dapat menggunakannya shopt -s dotglob untuk memasukkan mereka dalam hitungan. - Philipp
Ini sangat berguna, karena itu sederhana dan Anda dapat menempatkan jalan yang Anda inginkan sebagai gantinya /*, mis. ./ untuk direktori saat ini atau ./* untuk setiap item dalam direktori saat ini. - psur
@psur atau bisa Anda gunakan ./*/ untuk hanya mendapatkan subfolder dan tidak semua item - relascope
Versi yang diurutkan: du -sh /* | sort -h - Vu Anh
@ c1phr Jika Anda sort tidak punya -h, Anda harus meninggalkannya dari du juga, jika tidak, pemilahan akan mencampur kilo / mega / gigabyte. du -s /* | sort -nr. - Thomas


Saya sering harus mencari direktori terbesar, jadi untuk mendapatkan daftar yang diurutkan berisi 20 direktori terbesar, saya melakukan ini:

du -m /some/path | sort -nr | head -n 20

Dalam hal ini ukuran akan dilaporkan dalam megabyte.


70
2017-07-29 12:07



Berikut ini cara untuk membuatnya lebih mudah dibaca du -sh / some / path | urutkan -jr | kepala -n 20 - Xedecimal
@Xedecima masalah dengan menggunakan h adalah semacam itu tidak tahu bagaimana menangani ukuran yang berbeda. Misalnya 268K diurutkan lebih tinggi dari 255M, dan keduanya diurutkan lebih tinggi dari 2.7G - chrisan
Argumen -h (dapat dibaca manusia) pada perintah 'semacam' harus benar-benar membaca nilai-nilai ini. Sama seperti du's -h flag mengekspornya. Tergantung pada apa yang Anda jalankan, saya tebak. - Xedecimal
Bekerja di Ubuntu 16.04. Tip yang bagus. - SDsolar


Saya suka menggunakannya Ncdu untuk itu, Anda dapat menggunakan kursor untuk menavigasi dan menelusuri melalui struktur direktori itu bekerja dengan sangat baik.


14
2017-12-24 10:07





Jawaban yang ada sangat membantu, mungkin beberapa pemula (seperti saya) akan menemukan ini bermanfaat juga.

  1. Lingkaran yang sangat mendasar, tetapi bagi saya ini adalah awal yang baik untuk beberapa operasi terkait ukuran lainnya:

    for each in $(ls) ; do du -hs "$each" ; done
    
  2. Sangat mirip dengan jawaban pertama dan hasil yang hampir sama dengan 1.), tetapi saya butuh waktu untuk memahami perbedaan * to ./* jika dalam subdirektori:

    du -sh ./*
    

9
2017-11-22 16:53





Pengikut du doa harus bekerja pada sistem BSD:

du -d 1 /

6
2017-07-11 17:29



Saya du (Ubuntu 10.4) tidak memiliki file -d pilihan. Sistem apa yang Anda gunakan? - Thomas
Pada openSUSE saya tidak memiliki opsi -d :( - 2ndkauboy
OK, maka itu hanya opsi BSD (saya menggunakan OS X). - Philipp
Kombinasi opsi portabel kanan pada BSD / * NIX adalah du -sk /*. Aku benci itu -k hal-hal yang begitu banyak. Linux ' -h benar-benar batu. - Dummy00001
dalam sistem lain, itu --max-depth - Vishnu Kumar


Ini tidak mudah. Itu du perintah baik menunjukkan file dan folder (default) atau hanya ukuran semua item yang Anda tentukan pada baris perintah (opsi -s).

Untuk mendapatkan item terbesar (file dan folder), diurutkan, dengan ukuran yang dapat dibaca manusia di Linux:

du -h | sort -h

Ini akan mengubur Anda dalam satu ton file kecil. Anda bisa menyingkirkannya --threshold (1 MB dalam contoh saya):

du --threshold=1M -h | sort -h

Keuntungan dari perintah ini adalah bahwa itu termasuk folder dot tersembunyi (folder yang dimulai dengan .).

Jika Anda benar-benar hanya ingin folder, Anda perlu menggunakan find tetapi ini bisa sangat, sangat lambat sejak du harus memindai banyak folder beberapa kali:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h

3
2017-07-24 11:04



--threshold ^^^ opsi ini tidak availavle di linux - podarok
@podarok Ini tersedia di OpenSUSE 13.2 Linux. Cobalah mencari versi terbaru dari distribusimu atau kompilasi versi yang lebih baru dari paket itu sendiri. - Aaron Digulla
Tidak bekerja pada Ubuntu LTS (14.04). Ini yang paling baru) - podarok
@podarok Versi mana dari GNU coreutils? Punyaku 8,24. - Aaron Digulla
Caching mungkin merupakan istilah yang buruk. Saya sedang memikirkan sesuatu seperti dilakukan di pelabuhan ini superuser.com/a/597173/121352 di mana kami memindai isi disk sekali ke dalam pemetaan dan kemudian melanjutkan menggunakan data dari pemetaan itu daripada memukul disk lagi. - Hennes


Sadarilah, bahwa Anda tidak dapat membandingkan direktori dengan du pada sistem / mesin yang berbeda tanpa memastikan, keduanya berbagi ukuran file sistem yang sama. Ini mungkin menghitung jika Anda rsync beberapa file dari mesin linux ke nas dan Anda ingin membandingkan direktori yang disinkronkan sendiri. Anda mungkin mendapatkan hasil yang berbeda du karena blocksizes berbeda ....


1
2017-10-05 15:36





Anda mungkin juga ingin memeriksanya xdiskusage. Akan memberi Anda informasi yang sama, tetapi ditampilkan secara grafis, ditambah memungkinkan untuk menelusuri (sangat berguna). Ada utilitas lain yang serupa untuk KDE dan bahkan Windows.


0
2017-07-12 19:42





Anda bisa menggunakannya ls setara dengan awk:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

Output dari ls disalurkan ke awk. awk mulai memproses data. Pembatas standar adalah ruang. Variabel penjumlahan tot diinisialisasi ke nol; pernyataan berikut dijalankan untuk setiap baris / baris yang dikeluarkan oleh ls. Itu hanya kenaikan tot dengan ukuran. $5 singkatan dari kolom kelima (dikeluarkan oleh ls). Pada akhirnya kita membagi dengan (1024 * 1024) untuk menjumlahkan dalam megabyte.

Jika Anda akan mengubahnya menjadi skrip atau fungsi (.bashrc), Anda juga dapat menggunakannya untuk mendapatkan ukuran himpunan bagian tertentu dari direktori, sesuai dengan tipe file.

Jika Anda menginginkan informasi sistem yang luas, kdirstat mungkin berguna!


0
2017-12-20 09:56



Saya setuju seseorang dapat memperluas contoh ini dan melakukan trik seperti mendapatkan ukuran "subset tertentu dari direktori, sesuai dengan tipe file" dll .; ini mungkin tampak sebagai titik awal yang baik. Namun demikian solusi ini cacat sejak awal. Untuk setiap pengguna yang ingin menggunakan metode ini, saya merekomendasikan membaca jawaban dan komentar untuk pertanyaan ini begitu juga dengan artikel terkait di sana. Saya tidak mengatakan Anda tidak dapat melakukannya sama sekali. Ketahui batasannya, itu saja. - Kamil Maciorowski