Saat saya menggunakan ls
atau du
, saya mendapatkan jumlah ruang disk yang ditempati setiap file.
Saya membutuhkan jumlah total semua data dalam file dan subdirektori yang akan saya dapatkan jika saya membuka setiap file dan menghitung byte. Poin bonus jika saya bisa mendapatkan ini tanpa membuka setiap file dan menghitung.
ls
sebenarnya menunjukkan jumlah byte di setiap file, bukan jumlah ruang disk. Apakah ini cukup untuk kebutuhan Anda?du
tidak dapat digunakan untuk menjawab pertanyaan ini. Ini menunjukkan jumlah ruang disk yang ditempati direktori pada disk (data file ditambah ukuran meta-informasi sistem file tambahan). Thedu
output dapat bahkan lebih kecil dari ukuran total semua file. Ini dapat terjadi jika sistem file dapat menyimpan data yang dikompresi pada disk atau jika tautan keras digunakan. Jawaban yang benar didasarkan padals
danfind
. Lihat jawaban oleh Nelson dan bytepan di sini, atau jawaban ini: unix.stackexchange.com/a/471061/152606Jawaban:
Jika Anda menginginkan 'ukuran yang jelas' (yaitu jumlah byte di setiap file), bukan ukuran yang diambil oleh file di disk, gunakan opsi
-b
atau--bytes
(jika Anda memiliki sistem Linux dengan GNU coreutils ):sumber
du -shb
(seperti yang disarankan oleh jawaban ini),-b
pengaturan tampaknya mengesampingkan-h
pengaturan.du -sh --apparent-size /dir/
Penggunaan
du -sb
:Secara opsional, tambahkan
h
opsi untuk hasil yang lebih ramah pengguna:sumber
brew install coreutils
. Ini akan tersedia sebagai perintahgdu
.ls
->file.gz hardlink-to-file.gz
.stat -c %s file.gz
->9657212
.stat -c %s hardlink-to-file.gz
->9657212
.du -sb
->9661308
. Ini jelas bukan ukuran total konten tetapi ukuran direktori pada disk.cd ke direktori, lalu:
ftw!
Awalnya menulis tentang itu di sini: https://ao.gl/get-the-total-size-of-all-the-files-in-a-directory/
sumber
-L
opsidu
berikut symlinks.Hanya alternatif:
grep -v '^d'
akan mengecualikan direktori.sumber
ls -lR | grep '.png$' | awk '{total += $5} END {print "Total:", total/1024/1024, "MB"}'
du
solusi ini, benar-benar menghitung ukuran total semua data dalam file seolah-olah dibuka satu per satu dan byte mereka dihitung. Tapi ya, menambahkan-A
parameter diperlukan untuk menghitung file tersembunyi juga.Format "% s" stat memberi Anda jumlah byte sebenarnya dalam sebuah file.
Jangan ragu untuk mengganti metode favorit Anda untuk menjumlahkan angka .
sumber
find -print0
danxargs -0
dibutuhkan untuk nama file dengan spasi. OS X inginkanstat -f %z
.du
laporan.)du
utilitas, jawaban ini benar. Ini sangat mirip dengan jawaban di sini: unix.stackexchange.com/a/471061/152606 . Tetapi saya akan menggunakan! -type d
daripada-type f
menghitung symlink juga (ukuran symlink itu sendiri (biasanya beberapa byte), bukan ukuran file yang ditunjuknya).Jika Anda menggunakan "du" busybox di sistem tertanam, Anda tidak bisa mendapatkan byte yang tepat dengan du, hanya Kbytes yang bisa Anda dapatkan.
sumber
Saat folder dibuat, banyak sistem file Linux mengalokasikan 4096 byte untuk menyimpan beberapa metadata tentang direktori itu sendiri. Ruang ini bertambah dengan kelipatan 4096 byte seiring pertumbuhan direktori.
du perintah (dengan atau tanpa opsi -b) hitung ruang ini , seperti yang Anda lihat mengetik:
Anda akan mendapatkan hasil 4096 byte untuk dir kosong. Jadi, jika Anda meletakkan 2 file berukuran 10.000 byte di dalam dir, jumlah total yang diberikan oleh du -sb akan menjadi 24096 byte.
Jika Anda membaca dengan cermat pertanyaannya, bukan ini yang ditanyakan. Penanya bertanya:
bahwa dalam contoh di atas harus 20000 byte, bukan 24096.
Jadi, jawaban yang benar IMHO bisa jadi merupakan perpaduan jawaban Nelson dan saran hlovdal untuk menangani nama file yang mengandung spasi:
sumber
Setidaknya ada tiga cara untuk mendapatkan "jumlah total semua data dalam file dan subdirektori" dalam byte yang bekerja di Linux / Unix dan Git Bash untuk Windows, yang tercantum di bawah ini dalam urutan dari rata-rata tercepat hingga paling lambat. Untuk referensi Anda, mereka dijalankan di root sistem file yang cukup dalam (
docroot
dalam instalasi Magento 2 Enterprise yang terdiri dari 71.158 file dalam 30.027 direktori).1.
2.
3.
Keduanya juga berfungsi, tetapi mengandalkan perintah yang tidak ada di Git Bash untuk Windows:
1.
2.
Jika Anda hanya menginginkan total untuk direktori saat ini, tambahkan
-maxdepth 1
kefind
.Perhatikan bahwa beberapa solusi yang disarankan tidak memberikan hasil yang akurat, jadi saya akan tetap menggunakan solusi di atas.
sumber
dc
adalah bagian daribc
paket, jadi untuk mendapatkannyadc
perlu menginstalbc
.Untuk Win32 DOS, Anda dapat:
c:> dir / sc: \ direktori \ Anda \ inginkan
dan baris kedua dari belakang akan memberi tahu Anda berapa byte yang dibutuhkan file.
Saya tahu ini membaca semua file dan direktori, tetapi bekerja lebih cepat dalam beberapa situasi.
sumber
du
berguna, tetapifind
berguna jika Anda ingin menghitung ukuran beberapa file saja (misalnya, menggunakan filter menurut ekstensi). Perhatikan juga bahwafind
mereka sendiri dapat mencetak ukuran setiap file dalam byte. Untuk menghitung ukuran total kita dapat menghubungkandc
perintah dengan cara berikut:Berikut
find
menghasilkan urutan perintahdc
seperti123 + 456 + 11 +
. Meskipun, program yang diselesaikan harus seperti0 123 + 456 + 11 + p
(ingat notasi postfix).Jadi, untuk mendapatkan program yang selesai kita perlu meletakkan
0
di stack sebelum menjalankan urutan dari stdin, dan mencetak nomor teratas setelah mengeksekusi (p
perintah di akhir). Kami mencapainya melaluidc
opsi:-e0
hanyalah jalan pintas untuk-e '0'
meletakkan0
di tumpukan,-f-
adalah untuk membaca dan menjalankan perintah dari stdin (yang dihasilkan difind
sini),-ep
untuk mencetak hasil (-e 'p'
).Untuk mencetak ukuran dalam MiB seperti yang
284.06 MiB
dapat kita gunakan-e '2 k 1024 / 1024 / n [ MiB] p'
di poin 3 (sebagian besar spasi opsional).sumber
Ini dapat membantu:
Perintah di atas akan menjumlahkan semua file yang meninggalkan ukuran direktori.
sumber
-A
opsi harus ditambahkan kels
.Menggunakan:
Di mana <DIR> adalah direktori yang ingin Anda periksa.
'-C' memberi Anda data total keseluruhan yang diekstraksi menggunakan bagian 'grep total' dari perintah, dan jumlah Kbytes diekstraksi dengan perintah awk.
Satu-satunya peringatan di sini adalah jika Anda memiliki subdirektori yang berisi teks "total", ini akan dimuntahkan juga.
sumber