Bagaimana cara menentukan ukuran total direktori (folder) dari baris perintah?

787

Apakah ada perintah sederhana untuk menampilkan ukuran total agregat (penggunaan disk) dari semua file dalam direktori (folder)?

Saya sudah mencoba ini, dan mereka tidak melakukan apa yang saya inginkan:

  • ls -l, yang hanya menampilkan ukuran file individual dalam direktori, atau
  • df -h, yang hanya menampilkan ruang kosong dan bekas pada disk saya.
David Barry
sumber
Pengingat ramah bahwa mungkin masuk akal hampir pada sistem file CoW seperti BTRFS.
val

Jawaban:

1267

Perintah du"meringkas penggunaan disk masing-masing FILE, secara rekursif untuk direktori," misalnya,

du -hs /path/to/directory
  • -hadalah untuk mendapatkan angka "dapat dibaca manusia", mis. dapatkan 140Malih-alih 143260(ukuran dalam KBytes)
  • -sadalah untuk ringkasan (jika tidak, Anda akan mendapatkan tidak hanya ukuran folder tetapi juga untuk semua yang ada di folder secara terpisah)

Saat Anda menggunakan, -hAnda dapat mengurutkan nilai yang dapat dibaca manusia menggunakan

du -h | sort -h

Tanda -hpada sortakan mempertimbangkan nilai ukuran "Dapat Dibaca Manusia".


Jika ingin menghindari daftar semua file dan direktori secara --max-depthberulang , Anda dapat menyediakan parameter untuk membatasi berapa banyak item yang ditampilkan. Kebanyakan pada umumnya,--max-depth=1

du -h --max-depth=1 /path/to/directory
Marcel Stimberg
sumber
9
hormat untuk bekerja ekstra. :)
myusuf3
93
Saya menggunakan du -shatau DOOSH sebagai cara untuk mengingatnya (CATATAN: perintahnya sama, hanya organisasi bendera commandline untuk keperluan memori)
Marco Ceppi
3
Ada opsi yang berguna untuk du yang disebut --apparent-size. Ini dapat digunakan untuk menemukan ukuran sebenarnya dari suatu file atau direktori (sebagai lawan dari jejaknya pada disk) misalnya, file teks dengan hanya 4 karakter akan menempati sekitar 6 byte, tetapi akan tetap muncul sebagai mengambil ~ 4K di output du -sh biasa. Namun, jika Anda melewati opsi --apparent-size, output akan menjadi 6. man du mengatakan: --apparent-size mencetak ukuran yang jelas, daripada menggunakan disk; walaupun ukuran yang jelas biasanya lebih kecil, itu mungkin lebih besar karena lubang di ('jarang') file, fragmentasi internal, blok tidak langsung
Hopping Bunny
4
Ini juga berfungsi untuk OS X! Terima kasih, saya benar-benar mencari cara untuk membersihkan file, baik pada mesin lokal saya, dan server saya, tetapi metode otomatis sepertinya tidak berfungsi. Jadi, saya berlari du -hs *dan pergi ke direktori terbesar dan menemukan file mana yang sangat besar ... Ini adalah metode yang bagus, dan yang terbaik adalah Anda tidak perlu menginstal apa pun! Pasti layak mendapat dukungan saya
Dev
@BandaMuhammadAlHelal Saya pikir ada dua alasan: pembulatan ( dumemiliki pembulatan agak aneh, tidak menunjukkan desimal jika nilainya memiliki lebih dari satu digit pada unit yang dipilih), dan masalah awalan klasik 1024 vs 1000 . dumemiliki opsi -B(atau --block-size) untuk mengubah unit tempat nilai ditampilkan, atau Anda bisa menggunakan -balih-alih -hmendapatkan nilai "mentah" dalam byte.
Marcel Stimberg
164

Baru-baru ini saya menemukan alat interaktif hebat berbasis ncurses, yang dengan cepat memberi Anda gambaran tentang ukuran direktori. Mencari alat semacam itu selama bertahun-tahun.

  • cepat menelusuri melalui hierarki file
  • Anda dapat menghapus mis. file temporer besar dari dalam alat
  • sangat cepat

Anggap saja sebagai baobab untuk baris perintah:

apt-get install ncdu
geekQ
sumber
11
Ini benar-benar fantastis! Seperti DaisyDisk, untuk OSX
subZero
3
ncduMengagumkan! Setelah menginstalnya, lakukan saja ini ncdu /. Anda akan dengan cepat menemukan file terbesar di sistem. Juga tekan hsaat berada di dalam antarmuka konsol ncdu. Ini memiliki pintasan yang sangat berguna
vlad-ardelean
Ini persis apa yang saya butuhkan: sangat sederhana, sangat efisien. Cinta murni.
user3790897
52

Ini menemukan ukuran secara rekursif dan meletakkannya di sebelah setiap nama folder, bersama dengan ukuran total di bagian bawah, semua dalam format manusia

du -hsc *
Brad
sumber
17

Nikmati!

du foldername

Informasi lebih lanjut tentang perintah itu di sini

myusuf3
sumber
10

tree adalah perintah lain yang berguna untuk pekerjaan ini:

Cukup instal melalui sudo apt-get install treedan ketik yang berikut ini:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

Dari pohon manusia :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)
αғsнιη
sumber
9

Di bawah ini adalah apa yang saya gunakan untuk mencetak total, folder, dan ukuran file:

$ du -sch /home/vivek/* | sort -rh

Detail

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Keluaran

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files
vivekyad4v
sumber
4

Jawabannya telah membuatnya jelas yaitu dualat untuk menemukan ukuran total direktori. Namun, ada beberapa faktor yang perlu dipertimbangkan:

  • Kadang-kadang, duoutput bisa menyesatkan karena melaporkan ruang yang dialokasikan oleh sistem file, yang mungkin berbeda dari jumlah ukuran file individu. Biasanya filesystem akan mengalokasikan 4096 byte untuk file bahkan jika Anda hanya menyimpan satu karakter di dalamnya!

  • Perbedaan output karena daya 2 dan daya 10 unit. The -hberalih ke dumembagi jumlah byte dengan 2 ^ 10 (1024), 2 ^ 20 (1.048.576) dll untuk memberikan output yang dapat dibaca manusia. Banyak orang mungkin lebih terbiasa melihat kekuatan 10 (misalnya 1K = 1000, 1M = 1000000) dan terkejut dengan hasilnya.

Untuk menemukan jumlah total ukuran semua file dalam direktori, dalam byte, lakukan:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Contoh:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169
pdp
sumber
Find-ls-awk akan mengembalikan nilai yang salah untuk folder besar # 1 . Untuk awk yang lebih baru, Anda dapat menambahkan --bignumatau -M; jika itu bukan pilihan, gunakan find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2 .
goozez
Jika kekuatan 2 yang digunakan adalah masalah, ada --sipilihan: "seperti -h, tapi gunakan kekuatan 1000 bukan 1024"
muru
1

Hanya untuk ukuran direktori dalam format yang dapat dibaca, gunakan di bawah ini:

du -hs directoryname

Ini mungkin bukan di bagian yang benar, tetapi dari baris perintah, Anda dapat mencoba:

ls -sh filename

The -sadalah ukuran, dan -hini dapat dibaca manusia.

Gunakan -luntuk menampilkan lsdaftar, seperti di bawah ini:

ls -shl
Shiv Singh
sumber
0

du /foldernameadalah perintah standar untuk mengetahui ukuran folder. Ini adalah praktik terbaik untuk menemukan opsi dengan membaca halaman manual:

man du

Anda harus membaca halaman manual (tersedia online ) sebelum Anda menggunakan perintah.

Balaswamy vaddeman
sumber
0

Berikut ini skrip POSIX yang akan bekerja dengan:

  • File
  • File
  • Direktori
  • Direktori
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

Sumber

Steven Penny
sumber
0

Jika direktori yang Anda inginkan memiliki banyak sub-direktori, gunakan yang berikut ini:

$ cd ~/your/target/directory
$ du -csh 

-c, --total menghasilkan grand total
-s, menampilkan --summarize hanya total untuk setiap argumen
h, ukuran cetak --human dapat dibaca dalam format yang dapat dibaca manusia (misalnya, 1K 234M 2G)

yang kemudian akan menghasilkan total keseluruhan penggunaan memori oleh semua file / folder di direktori saat ini.

kmario23
sumber
-1

Yang terbaik menurut saya adalah sebagai berikut:

du -h directory_name | tail -n1

Ini hanya akan menunjukkan ukuran direktori yang Anda minati dan tidak akan mencetak ukuran direktori dan file apa pun di dalam direktori itu.

Saya harus menambahkan bahwa jika ukuran folder besar maka du membutuhkan waktu lebih lama. Anda harus bersabar agar perintah ini berfungsi. Sama seperti perintah unix lainnya, Anda dapat mengetahui total waktu untuk proses ini dengan menggunakan timesebelum perintah ini:

time du -h directory_name | tail -n1
Tenang
sumber
6
dumemiliki opsi untuk ini:-s
muru