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

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

Saya telah 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.

Perintah du "merangkum penggunaan disk dari setiap FILE, secara rekursif untuk direktori," mis.,

du -hs /path/to/directory
  • -h adalah untuk mendapatkan angka "dapat dibaca manusia", misalnya mendapatkan 140M alih-alih 143260 (ukuran dalam KBytes)
  • -s adalah untuk ringkasan (jika tidak, Anda akan mendapatkan tidak hanya ukuran folder tetapi juga untuk semuanya di folder secara terpisah)

Saat Anda menggunakan -h Anda dapat mengurutkan nilai yang dapat dibaca manusia menggunakan

du -h | sort -h

The -h bendera pada sort akan mempertimbangkan nilai ukuran" dapat dibaca manusia".


Jika ingin menghindari rekursif daftar semua file dan direktori, Anda dapat menyediakan --max-depth parameter untuk membatasi berapa banyak item yang ditampilkan. Paling umum, --max-depth=1

du -h --max-depth=1 /path/to/directory

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

  • penelusuran cepat melalui hierarki file
  • Anda dapat menghapus misalnya file-file sementara besar dari dalam alat
  • sangat cepat

Anggap saja sebagai baobab untuk baris perintah:

apt-get install ncdu

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

du -hsc *

Nikmati!

du foldername

Informasi lebih lanjut tentang perintah itu di sini

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

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

Rincian

 ------------------------------------------------------------   -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/lib992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

tree adalah perintah lain yang berguna untuk pekerjaan ini:

Hanya menginstalnya melalui sudo apt-get install tree dan ketik berikut:

tree --du -h /path/to/directory......33.7M used in 0 directories, 25 files

Dari man tree:

-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.)

Jawabannya telah membuatnya jelas bahwa du adalah alat untuk menemukan Ukuran total direktori. Namun, ada beberapa faktor yang perlu dipertimbangkan:

  • Sesekali, du output dapat menyesatkan karena melaporkan ruang yang dialokasikan oleh sistem file, yang mungkin berbeda dari jumlah ukuran file individual. Biasanya filesystem akan mengalokasikan 4096 byte untuk file bahkan jika Anda disimpan hanya satu karakter di dalamnya!

  • Perbedaan Output karena kekuatan 2 dan kekuatan 10 unit. The -h beralih ke du membagi jumlah byte dengan 2^10 (1024), 2^20 (1048576) 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 1255729664$ find .  -ls | awk '{sum += $7} END {print sum}'249008169

Anda dapat menggunakan alat debu:

PS C:\git> dust   0B       ┌── templates           │                                      █ │   0%   0B     ┌─┴ git-core              │                                      █ │   0%   0B   ┌─┴ share                   │                                      █ │   0%  76B   ├── readme.md               │                                      █ │   0% 156K   │   ┌── less.exe            │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█ │   2% 2.7M   │   ├── git-remote-https.exe│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████████████████ │  42% 3.6M   │   ├── git.exe             │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████ │  56% 6.5M   │ ┌─┴ git-core              │███████████████████████████████████████ │ 100% 6.5M   ├─┴ libexec                 │███████████████████████████████████████ │ 100% 6.5M ┌─┴ .                         │███████████████████████████████████████ │ 100%

Contoh saya adalah dari Windows, tetapi Linux dan Apple juga didukung:

https://github.com/bootandy/dust

Saya dikondisikan untuk ll perintah yang Alias untuk ls -alF. Itu hanya kehilangan jumlah file dan Ukuran file di bagian bawah. Saya bermain dengan du dan tree tapi tidak bisa mendapatkan total yang saya butuhkan. Jadi saya buat lll untuk melakukan itu untukku.

Dalam Anda ~/.bashrc Tempatkan yang berikut ini:

lll () {    ls -alF "$@"    arr=($(ls -alF "$@" | awk '{TOTAL+=$5} END {print NR, TOTAL}'))    printf " \33[1;31m ${arr[0]}\33[m line(s).  "    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"#    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"}

Simpan file dan sumber daya menggunakan . ~/.bashrc (atau Anda dapat me-restart terminal Anda).


Contoh keluaran

Hal yang menyenangkan tentang ll output adalah warna itu. Ini dipertahankan dengan lll tapi hilang saat menggunakan find atau du:

lll sample output.png


TL; DR

Fungsi bonus yang dapat Anda tambahkan ke ~/.bashrc disebut BytesToHuman(). Ini melakukan apa yang diharapkan sebagian besar pengguna konsol untuk mengonversi angka besar ke MiB, GiB, dll:

function BytesToHuman() {    # https://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254    read StdIn    b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)    while ((b > 1024)); do        d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"        b=$((b / 1024))        let s++    done    echo "$b$d ${S[$s]}"} # BytesToHuman ()

Berikutnya flip komentar antara dua baris di lll () berfungsi agar terlihat seperti ini:

#    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"

Sekarang output Anda terlihat seperti ini:

lll sample output 2.png

Seperti biasa jangan lupa untuk kembali sumber dengan . ~/.bashrc setiap kali melakukan perubahan. (Atau restart terminal tentu saja)

PS-dua minggu dalam karantina sendiri akhirnya memberi saya waktu untuk mengerjakan tujuan berusia lima tahun ini.

du /foldername adalah 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.

Pengingat ramah bahwa itu mungkin masuk akal hampir nol pada sistem file CoW seperti BTRFS.