Bagaimana cara menemukan jumlah yang disimpan dalam direktori secara rekursif?

136

Saya tahu Anda dapat melihat ukuran byte file ketika Anda melakukan daftar panjang dengan llatau ls -l. Tapi saya ingin tahu berapa banyak penyimpanan dalam suatu direktori termasuk file-file di dalam direktori itu dan subdirektori di dalamnya, dll. Saya tidak ingin jumlah file, tetapi jumlah penyimpanan yang digunakan file-file itu.

Jadi saya ingin tahu berapa banyak penyimpanan dalam direktori tertentu secara rekursif? Saya menduga, jika ada perintah, itu akan dalam byte.

Rob Avery IV
sumber

Jawaban:

146

Coba lakukan ini:

du -s dir

atau

du -sh dir

butuh -hdukungan, tergantung OS Anda.

Lihat

man du
Gilles Quenot
sumber
2
tambahkan -bke output dalam byte
pcnate
4
--semua daftar semua file dan -h menunjukkan ukuran file dalam format yang dapat dibaca manusia du -h --all
Praneeth
29

Anda hanya melakukan:

du -sh /path/to/directory

di mana -suntuk ringkasan dan -huntuk dibaca manusia ( opsi non standar ).

Namun hati-hati , tidak seperti lsini, ini tidak akan menunjukkan kepada Anda ukuran file tetapi penggunaan disk (yaitu kelipatan dari ukuran blok sistem file), tetapi file tersebut mungkin lebih kecil, atau bahkan lebih besar, sehingga Anda dapat menggunakan --apparent-sizeopsi:

du -sh --apparent-size /path/to/directory

Ini adalah ukuran yang akan ditransfer melalui jaringan jika Anda harus.

Memang, file tersebut mungkin memiliki "lubang" di dalamnya (shell kosong), mungkin lebih kecil dari ukuran blok sistem file, dapat dikompresi pada tingkat sistem file, dll. Halaman manual menjelaskan hal ini.

Seperti yang ditunjukkan Nicklas , Anda juga dapat menggunakan penganalisa penggunaan disk. Diluncurkan dari dalam direktori itu akan menunjukkan kepada Anda folder dan file apa yang menggunakan ruang disk dengan memesannya terbesar ke terkecil.ncdu

Anda dapat melihat pertanyaan ini juga.

Totor
sumber
19

Catatan bahwa jika Anda ingin tahu semua ukuran {sub} folder di dalam direktori, Anda juga dapat menggunakan -datau --max-depthpilihan du(yang mengambil argumen: batas rekursif)

Misalnya :

du -h /path/to/directory -d 1

Akan menunjukkan sesuatu seperti

4.0K /path/to/directory/folder1
16M  /path/to/directory/folder2
2.4G /path/to/directory/folder3
68M  /path/to/directory/folder4
8G   /path/to/directory/folder5

PS: Memasukkan 0sebagai batas rekursif sama dengan -sopsi. Kedua perintah itu akan memberi Anda hasil yang sama (ukuran direktori yang dapat dibaca manusia rekursif yang Anda berikan):

du -h /path/to/directory -d 0
du -sh /path/to/directory
Flo Schild
sumber
-d 1perlu sebelum jalur direktori
Abhinav Singi
Kebutuhan? Ini berfungsi untuk saya setelah jalur direktori, di ubuntu / debian. Akan lebih baik untuk memilikinya sebelumnya, saya setuju
Flo Schild
14

Alternatif untuk perintah yang telah disebutkan duadalah ncduyang merupakan penganalisa penggunaan disk yang bagus untuk digunakan di terminal. Anda mungkin perlu menginstalnya terlebih dahulu, tetapi tersedia di sebagian besar repositori paket.

Sunting: Untuk format keluaran, lihat tangkapan layar ini http://dev.yorhel.nl/ncdu/scr

Niklas
sumber
Keajaiban! Dengan ini saya bisa melihat folder mana yang memegang volume tinggi penyimpanan ukuran disk. Saya bahkan menemukan semua file saya yang hilang secara misterius. Alat hebat itu.
Faron
11

Ini akan memberi Anda daftar ukuran dari direktori saat ini, termasuk folder (rekursif) dan file.

$ du -hs *
7.5M    Applications
9.7M    Desktop
 85M    Documents
 16K    Downloads
 12G    Google Drive
 52G    Library
342M    Movies
8.3M    Music
780M    Pictures
8.5G    Projects
8.0K    Public
 16K    client1.txt
Simon Liu
sumber
3
untuk memesan berdasarkan ukuran: du -hs * | sort -hs
Kaiser
3

Di Unix, direktori hanya berisi nama dan referensi ke objek sistem file (inode, yang dapat merujuk ke direktori, file, atau beberapa hal eksotis lainnya). Suatu file dapat muncul di bawah beberapa nama dalam direktori yang sama, atau dicantumkan dalam beberapa direktori. Jadi "ruang yang digunakan oleh direktori dan file di dalam" benar-benar tidak masuk akal, karena file tidak "di dalam".

Yang mengatakan, perintah du(1)mencantumkan ruang yang digunakan oleh direktori dan semua yang dapat dicapai melaluinya, du -smemberikan ringkasan, dengan -hbeberapa implementasi seperti GNU dumemberikan output "dapat dibaca manusia" (yaitu, kilobyte, megabyte).

vonbrand
sumber
1

Bagi saya itu bekerja mundur dalam hal kedalaman dan jalur pada OS X El Capitán

du -h -d 1 /path/to/directory
GZepeda
sumber
1

Anda dapat menggunakan "file-size.sh" dari perpustakaan Velk awk :

ls -ARgo "$@" | awk '{q += $3} END {print q}'
Steven Penny
sumber