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.

Abdul Al Hazred
sumber
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
    
sam
sumber
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 .
Pasif
sumber
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).

Chrispie
sumber
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.

Teque5
sumber
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.

Tblue
sumber
26

The duperintah menunjukkan penggunaan disk dari file.

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

du -h (file name)
jackotonye
sumber
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 .
Andy Foster
sumber
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 ./*
ConnerMan
sumber
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
Mpen
sumber
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}'
Leon Chang
sumber
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/
feldversuch
sumber
7

Satu lagi varian:

du -h --max-dep=1
0x8BADF00D
sumber
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).

anton_rh
sumber
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.

arupgsh
sumber
5

Berikut ini skrip POSIX yang akan bekerja dengan:

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

Sumber

Steven Penny
sumber