Bagaimana cara mendapatkan ukuran direktori di baris perintah?


1065

Saya mencoba untuk mendapatkan ukuran direktori (berisi direktori dan sub direktori) dengan menggunakan lsperintah dengan opsi l. Tampaknya berfungsi untuk file ( ls -l file name), tetapi jika saya mencoba untuk mendapatkan ukuran direktori (misalnya, ls -l /home), saya hanya mendapatkan 4.096 byte, meskipun secara keseluruhan jauh lebih besar.


18
1) Sebenarnya, Anda tidak bisa. Linux memiliki direktori, bukan folder. 2) Ada perbedaan antara ukuran direktori (yang merupakan file khusus yang menahan inode yang mengarah ke file lain), dan ukuran konten direktori tersebut. Seperti yang telah ditunjukkan orang lain, perintah du menyediakan yang terakhir, yang merupakan apa yang Anda inginkan.
jamesqf

11
karena Anda tampaknya baru, saya hanya akan menunjukkan -hopsi bermanfaat yang dapat Anda tambahkan ke -lopsi (yaitu ls -lh) untuk mendapatkan ukuran file yang akan dicetak dalam notasi yang ramah manusia seperti 1.1M bukan 1130301. The "h "dalam du -hsperintah yang @sam berikan sebagai jawaban untuk pertanyaan Anda tentang direktori juga berarti" dapat dibaca oleh manusia ", dan itu juga muncul di df -hmana menunjukkan jumlah yang dapat dibaca yang digunakan manusia dan ruang kosong pada disk.
msouth

Jawaban:


1490

du -sh file_path

Penjelasan

  • du( d isc u sage) perintah memperkirakan penggunaan ruang file_path
  • Opsinya -shadalah (dari man du):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    Untuk memeriksa lebih dari satu direktori dan melihat totalnya, gunakan du -sch:

      -c, --total
             produce a grand total
    

44
... kecuali Anda memiliki hardlink ;-) stackoverflow.com/questions/19951883/...
Rmano

15
Ini adalah jenis jawaban yang saya sukai <3 Ini dirangkum dan semacam pengantar untuk perintah dudan juga Anda memberikan cara untuk mencari rincian lebih lanjut man du...

Petunjuk untuk pembuat mirip Unix: Lain kali, buat perintah "diskusage" terlebih dahulu, atau mungkin bahkan "penggunaan disk" ... lalu pintasan ...;)
jave.web

Ini berfungsi sangat baik dengan find misalnya untuk menghitung jumlah ruang dalam subdirektori tertentu di jalur saat ini: $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
Alex Glukhovtsev

321

Cukup gunakan duperintah:

du -sh -- *

akan memberi Anda penggunaan disk kumulatif dari semua direktori, file, dll yang tidak disembunyikan dalam direktori saat ini dalam format yang dapat dibaca manusia.

Anda dapat menggunakan dfperintah untuk mengetahui ruang kosong di sistem file yang berisi direktori:

df -h .

4
du -sh *mulai melempar kesalahan "opsi tidak dikenal" jika ada file dalam direktori yang dimulai dengan tanda hubung. Lebih aman untuk dilakukandu -sh -- *
mpen

1
du -sh *tidak menunjukkan penggunaan memori folder tersembunyi
Prashant Prabhakar Singh

4
du -sh -- * .*untuk memasukkan dotfiles. Ini berguna untuk memasukkan .gitdirektori yang mungkin besar , misalnya. Atau di zsh Anda dapat setopt globdotsglob globfile secara default.
cbarrick

1
Apa yang --dilakukan? Saya tahu ini berlaku untuk shell built-in untuk mengakhiri argumen opsi, tetapi dubukan built-in, dan saya tidak melihat penggunaan ini didokumentasikan untuk du: linux.die.net/man/1/du
flow2k

Terkadang Anda ingin menambahkan -b( --apparent-size)
syarat

196

duadalah temanmu Jika Anda hanya ingin mengetahui ukuran total dari sebuah direktori kemudian lompat ke dalamnya dan jalankan:

du -hs

Jika Anda juga ingin tahu sub-folder mana yang mengambil berapa banyak ruang disk ?! Anda dapat memperluas perintah ini ke:

du -h --max-depth=1 | sort -hr

yang akan memberi Anda ukuran semua sub-folder (level 1). Output akan diurutkan (folder terbesar di atas).


Tampaknya pada beberapa versi linux (mungkin lebih lama?), Sort tidak memiliki h switch, dan oleh karena itu perintah terbaik berikutnya yang dapat saya temukan adalah: du -c --max-depth = 1 | sort -rn
richhallstoke

@richhallstoke jika Anda menggunakan ncdufile diurutkan berdasarkan ukuran turun secara default.
Armfoot

3
+1 untuk "| sort -hr"
afranques

67

dudapat menjadi rumit untuk digunakan karena Anda harus melewati 100 argumen untuk mendapatkan hasil yang layak. Dan mencari tahu ukuran folder tersembunyi bahkan lebih sulit.

Jadikan hidup Anda mudah dan bermanfaatncdu .

ncdu

Anda mendapatkan ringkasan folder yang mudah dijelajahi.


9
Ini harus menjadi jawaban yang benar, setidaknya bagi mereka yang dapat menginstal perangkat lunak pada sistem. Sayangnya saya tidak berpikir kebanyakan orang akan gulir ke bawah cukup jauh untuk melihat ini.
DavidR

@ RickyNotaro-Garcia Tidak, ini mengabaikan objek tersembunyi dan menggantung pada direktori besar. Mungkin saja ada solusi OK dengan selusin pipa, tapi mengapa menyia-nyiakan hidup Anda.
Teque5

@ RickyNotaro-Garcia Baca seluruh komentar saya: usaha Anda mengabaikan benda tersembunyi dan menggantung pada direktori besar.
Teque5

2
ncduHebat, saya selalu mencari perintah ini ketika lupa. Ini cepat, mudah dinavigasi dan membantu menemukan folder besar dengan mudah. FYI, ini tersedia untuk macOS juga dan mungkin semua mesin linux.
Lukas

..dan Anda dapat menghapus folder langsung dari ncdudengan menekan dtombol
ccpizza

32

Yang lain telah disebutkan du, tetapi saya juga ingin menyebutkan Ncdu - yang merupakan versi ncurses dudan menyediakan interaktivitas: Anda dapat menjelajahi hierarki direktori secara langsung dan melihat ukuran subdirektori.


26

The duperintah menunjukkan penggunaan disk dari file.

The -hpilihan menunjukkan hasil dalam bentuk manusia-dibaca (misalnya, 4k, 5M, 3G).

du -h (file name)

22

Semua contoh di atas akan memberi tahu Anda ukuran data pada disk (yaitu jumlah ruang disk yang digunakan file tertentu, yang biasanya lebih besar dari ukuran file sebenarnya). Ada beberapa situasi di mana ini tidak akan memberi Anda laporan yang akurat, jika data tidak benar-benar disimpan pada disk khusus ini dan hanya referensi inode yang ada.

Dalam contoh Anda, Anda telah menggunakan ls-l pada satu file, yang akan mengembalikan ukuran sebenarnya file, BUKAN ukurannya pada disk.

Jika Anda ingin mengetahui ukuran file aktual, tambahkan opsi -b ke du.

du -csbh .

Iya. Saya menggunakan sdf yang memampatkan & memotong file, jadi saya tidak tahu mengapa melaporkan angka yang sangat rendah. Ukuran sebenarnya dari file-file dengan ls dapat ditemukan dengan menggunakan: du -b
Ryan Shillington

15

secara pribadi saya pikir ini yang terbaik, jika Anda tidak ingin menggunakannya ncdu

# du -sh ./*

14
df -h .; du -sh -- * | sort -hr

Ini menunjukkan berapa banyak ruang disk yang tersisa di drive saat ini dan kemudian memberitahu Anda berapa banyak setiap file / direktori memakan. misalnya,

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json

FYI, sepertinya melaporkan ukuran pada disk. yaitu, itu mungkin akan diisi ke 4KB terdekat.
mpen


9

temukan semua file di bawah direktori saat ini secara rekursif dan jumlahkan ukurannya:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

Saya akan menggunakan -not -type djumlah tidak hanya ukuran file biasa ( -type f) tetapi juga ukuran tautan simbolik dan sebagainya.
anton_rh

Ini hebat, karena Anda tidak mendapatkan overhead yang diperlukan untuk menyimpan file, tetapi hanya ukuran file itu sendiri.
bballdave025

9

Ini adalah fungsi untuk .bash_aliases Anda

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

keluaran sampel:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

untuk subdirs:

$ dusort .
$ dusort /var/log/


6

Perhatikan bahwa dumencetak ruang yang ditempati direktori pada media yang biasanya lebih besar dari sekadar ukuran total semua file dalam direktori, karena dumemperhitungkan ukuran semua informasi tambahan yang disimpan pada media untuk mengatur direktori dengan kepatuhan dengan format sistem file.

Jika sistem file dapat dikompresi, maka dumungkin menghasilkan jumlah yang bahkan lebih kecil daripada ukuran total semua file, karena file mungkin dikompresi secara internal oleh sistem file dan sehingga mereka mengambil lebih sedikit ruang pada media daripada hanya informasi terkompresi yang dikandungnya. Sama jika ada file yang jarang.

jika ada tautan keras dalam direktori, maka dudapat mencetak nilai yang lebih kecil juga karena beberapa file berbeda dalam direktori merujuk data yang sama pada media.

Untuk mendapatkan ukuran total langsung dari semua file dalam direktori, ekspresi shell satu baris berikut dapat digunakan (dengan asumsi sistem GNU):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

atau bahkan lebih pendek:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

Itu hanya menjumlahkan ukuran semua file non-direktori dalam direktori (dan subdirektori secara rekursif) satu per satu. Perhatikan bahwa untuk symlink, ia melaporkan ukuran symlink (bukan file yang ditunjuk symlink).


5

Anda dapat gunakan

du -sh directory/

dan

du -sh filename

untuk mengetahui ruang yang ditempati oleh folder atau file.

df -h

akan menunjukkan penggunaan disk dalam format yang dapat dibaca manusia -h melakukannya.

Ada juga program berbasis gui yang disebut Disk Usage Analyzer.


5

Berikut ini skrip POSIX yang akan bekerja dengan:

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

Sumber

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.