Bagaimana cara mendapatkan ukuran direktori Linux atau Mac OS X dari baris perintah? [duplikat]

74

Pertanyaan ini sudah ada jawabannya di sini:

Perintah apa yang saya gunakan untuk menemukan ukuran semua file (secara rekursif) di direktori Linux atau Mac OS X?

Daryl Spitzer
sumber
2
Anda dapat menggunakan -kopsi untuk menggunakan ukuran blok 1K-byte
Zoker
Saya hanya ingin merekomendasikan perangkat lunak gratis ini bernama Disk Inventory X. unduh di sini derlien.com mudah digunakan untuk mac osx
Nimitack
Alih-alih du, saya menggunakan ncdu, Anda dapat menemukan referensi di sini, remysharp.com/2018/08/23/cli-improved
Alan Dong

Jawaban:

82

Versi BSD yang dudigunakan dalam OS X melaporkan ukuran dengan blok 512-byte - ukurannya pada dasarnya dibulatkan ke nilai 512-byte berikutnya. Ini memberi tahu Anda ruang pada disk, yang lebih besar dari jumlah data. Jika Anda memiliki banyak file kecil, perbedaannya bisa besar.

Ini sebuah contoh.

Ini adalah nilai dengan reguler du. Ada dalam blok 512-byte:

$ du -s
248   .

The -hHasil bendera di sejumlah lebih mudah dibaca, dalam kilobyte. Seperti yang diharapkan, itu setengah dari jumlah blok 512-byte:

$ du -hs
124K  .

Akhirnya, Anda dapat menggunakan finddan awkmemberi Anda jumlah byte aktual dalam file. Ini agak lambat, tetapi berhasil:

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527

Nilai ini sama persis dengan angka yang dilaporkan oleh jendela Find Info Get. (Tidak ada fork atau xattr aneh dalam set file ini.) Secara signifikan lebih kecil dari nilai yang dilaporkan oleh du.

Begini cara kerjanya: ia mendapat daftar semua file, dan meneruskannya ke ls -l; kemudian awkdigunakan untuk menghitung byte. The -type fbendera ada sehingga hanya file (dan tidak direktori) dikirim ke ls. Tanpa tanda itu, itu juga akan mengirim nama direktori ls, dan setiap file akan terdaftar dua kali: sekali sebagai file individual, dan sekali sebagai item dalam direktori.

Versi GNU dari dudapat memberikan nilai dalam byte aktual, bukan blok. Sangat disayangkan bahwa versi BSD dutidak fleksibel.

wch
sumber
Penjelasan yang bagus. Menariknya ketika menggunakan dudari GNU coreutils dengan -bopsi saya mendapatkan hasil yang berbeda daripada dengan findpipa Anda . Untuk direktori 36 GB saya mendapatkan perbedaan 82 KB.
Stefan Schmidt
apakah ada cara untuk mencetak ini dalam format yang lebih mudah dibaca manusia?
anon58192932
75

Tampilkan ukuran satu file

du -h path_to_a_file

Tampilkan ukuran isi direktori, setiap sub-direktori, dan masing-masing file individual:

du -h path_to_a_directory

Tampilkan ukuran isi direktori:

du -sh path_to_a_directory

Daryl Spitzer
sumber
25
du -schjika Anda menginginkan sesuatu yang lebih mudah dibaca.
Joey
@ Johannes, saya kira Anda harus memposting komentar ini sebagai jawaban, sehingga dapat diterima?
Arjan
Saya menemukan opsi -c berlebihan (setidaknya pada Mac OS X) dan du -sh menekan subtotal.
Daryl Spitzer
Aha, saya tidak tahu orang bisa menerima jawaban sendiri. Sekarang setidaknya orang tahu pertanyaannya terpecahkan.
Arjan
Saya akan dengan senang hati menerima jawaban baru yang merupakan peningkatan pada saya.
Daryl Spitzer
9

Du - memberitahu penggunaan disk bukan ukuran file .

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'

kode terminal di atas (im pada osx 10.6) menawarkan bagi saya hasil terbaik dan lebih cepat daripada "find ... -exec"

patokan cepat

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s
Asam
sumber
Jika Anda ingin melakukan hal yang sama di Ubuntu:find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
Rodrigo Polo
apakah ada cara untuk mendapatkan hasil ini dalam format yang bisa dibaca manusia?
anon58192932
6

Anda dapat menggunakan du -ah .yang menampilkan ukuran semua file dan direktori secara rekursif.

Ini dapat digabungkan dengan sort, sehingga Anda akan melihat 20 direktori terbesar di folder saat ini:

du -ah . | sort -rh | head -20

Catatan: Opsi -huntuk sorttidak tersedia di OSX / BSD, jadi Anda harus menginstal sortdari coreutils(misalnya melalui brew) dan menerapkan path bin ke PATH, misalnya

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

Kalau tidak gunakan:

du -a . | sort -rn | head -20
kenorb
sumber
Perintah pertama tidak berfungsi pada macOS saya 10.12.1 #du -ah. | sort -rh | head -20 sort: opsi tidak valid - h Coba `sort --help 'untuk informasi lebih lanjut.
nucleartux
3
@nucleartux Periksa catatan di bawah perintah. Ini berfungsi di GNU sort yang dapat Anda instal di macOS via:, brew install coreutilsjika tidak gunakan perintah sort BSD di akhir tanpa -h.
kenorb
2

Saya menggabungkan semua persetujuan Anda dan menggabungkannya dengan keluaran yang dapat dibaca manusia, hasilnya adalah:

#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

Tautan ke intinya: https://gist.github.com/mlegenhausen/9365461

malte
sumber