du perintah tidak mem-parsing direktori tersembunyi

25

Saya ingin memperkirakan jumlah ruang disk yang digunakan oleh direktori menggunakan perintah berikut.

du -sh dir_name

yang tidak menghitung direktori tersembunyi. Di halaman manual du tidak ada info tentang itu. Cara menghitung jumlah ruang disk yang digunakan oleh direktori termasuk file yang tersembunyi.

Talespin_Kit
sumber

Jawaban:

13

Sebenarnya, inilah buktinya:

mkdir .test
echo "hi" > .test/appo
du -a
4       ./.test/appo
8       ./.test
12      .

The -aopsi digunakan untuk secara eksplisit menunjukkan file mana dihitung.

Apakah Anda menggunakan du *?

stivlo
sumber
3
+1 untuk... you maybe using "du *" ?
sehe
2
Saya tidak menggunakan "du *". Saya lupa menyebutkan dalam pertanyaan bahwa saya perlu ringkasan ringkasan total. jadi jika saya menggunakan keduanya -a dan -s seperti pada du -as saya mendapatkan pesan kesalahan yang mengatakan "du: tidak dapat meringkas dan menampilkan semua entri". Ini satu masalah. Hal lain adalah bahwa saya bahkan dengan du -ai hanya bisa melihat file tingkat pertama. yaitu tidak dapat melihat file di dalam direktori tersembunyi.
Talespin_Kit
1
Saya baru saja menambahkan -a untuk menunjukkan semua file sedang dihitung, tapi jangan tambahkan bendera itu, itu hanya mempengaruhi tampilan, bukan totalnya. Saya menunjukkan kepada Anda contoh tandingan yang alih-alih direktori tersembunyi dihitung.
stivlo
1
sekarang saya menemukan masalahnya. Masalahnya adalah direktori tersembunyi adalah tautan simbolik, Jadi saya harus menggunakan "du -Lsh dir_name". Terima kasih.
Talespin_Kit
1
ah, aku mengerti, senang kau menemukannya, bersorak.
stivlo
53

Perintah ini menunjukkan kepada Anda ukuran direktori tersembunyi yang dirangkum

du -hs .[^.]*

ecerutti
sumber
1
Ini persis apa yang saya cari, terima kasih :)
Nikana Reklawyks
ini adalah solusi yang tepat
3pns
akan luar biasa jika Anda bisa menjelaskan sedikit keajaiban di baliknya. itu akan membantu untuk membentuk jawaban yang mencakup file dan direktori yang tersembunyi dan tidak tersembunyi.
kumetix
13

Perintah yang benar adalah: du -hs $(ls -A)

$ du -hs $(ls -A)
0   test
0   .test

du -hs .* *, seperti yang disebutkan dalam jawaban lain, salah jika Anda ingin membuat daftar semua file dan subdirektori (termasuk yang tersembunyi).

Contoh:

$ touch test
$ touch .test
$ echo *
test
$ echo .* *
. .. .test test
$ du -hs .* *
4,0K    .
1,8G    ..

Kenapa duberperilaku seperti ini? Karena Anda menggunakan -syang merangkum hasilnya dan bahwa semua file dan subdirektori adalah anak-anak, .maka du -hsjangan daftar mereka!

Guillaume Missonnier
sumber
11

FYI, untuk memperkirakan ukuran yang ditempati oleh berbagai direktori, jauh lebih baik menggunakan ncdu

Anda dapat menavigasi di GUI ncurses antara berbagai direktori dan itu akan menunjukkan ukuran masing-masing direktori. Jika saya menggunakan du, saya harus menjalankan perintah du untuk setiap direktori yang ingin saya periksa mana yang bisa rumit. Anda dapat mengurutkan direktori sesuai dengan ukuran yang ditempati juga di GUI ncurses.

Abhijeet Rastogi
sumber
1
Harap edit jawaban Anda untuk menunjukkan mengapa Anda yakin ncdu lebih "baik". Halaman yang ditautkan tidak benar-benar mengatakan apa-apa tentang hal itu selain bahwa itu adalah versi berbasis ncurses du. Selain dari metode tampilan yang lebih menarik, tidak ada indikasi yang jelas tentang perbedaan fungsional.
Dave Sherohman
Saya pikir kemampuan untuk menyesuaikan permintaan Anda secara dinamis adalah manfaat yang sangat besar. Saya dapat menjalankan ncdu pada ~, mempelajari direktori mana yang menggunakan paling banyak ruang dan kemudian langsung terjun ke dalamnya. Ini juga memberi Anda dikatan untuk menghapus direktori, sehingga Anda dapat membersihkan langsung dari antarmuka.
user88974
5

Itu dan tidak. Contoh:

Di direktori home: (hanya ada satu pengguna)

du -sh /home/*
2.6G    /home/user

di direktori pengguna: (perbedaan besar antara jumlah)

du -sh *
61M     bin
2.0M    dump-20130124104823.tar.gz
651M    public_html
472K    twitter-2.0.0.gem
11M     wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2

dan alasannya adalah:

du -sh /home/user/.rvm/
1.9G    /home/user/.rvm/

du akan menghitung direktori tersembunyi saat turun ke dalam subdirektori, tetapi dalam direktori saat ini * * tidak cocok dengan pola .directory_name sehingga elemen tersembunyi direktori saat ini akan dihilangkan.

Butuh beberapa waktu untuk mencari tahu, dan sebagai shadyabhi merekomendasikan itu akan menjadi jelas jika saya menggunakan ncdu.

bonyiii
sumber
1

Perintah yang benar adalah: du -hs .* *

burung gereja
sumber
Beberapa informasi tambahan akan menjadikan ini jawaban yang dapat diterima.
Ramhound
1

find -maxdepth 1 -exec du -sh "{}" \; | sort -h

Ini memberi Anda:

  • Ukuran file / direktori tersembunyi
  • Ukuran file / direktori tidak tersembunyi
  • Ukuran total besar dari direktori saat ini

Ini juga memilah-milah output untuk membuatnya mudah untuk melihat apa yang terbesar. Saya juga membuat ini sebagai alias di ~/.bash_aliasesfile saya .

alias big='find -maxdepth 1 -exec du -sh "{}" \; | sort -h'
alias sbig='sudo find -maxdepth 1 -exec du -sh "{}" \; | sort -h'

Sekarang saya bisa menjalankan biguntuk menemukan direktori terbesar di direktori dan sbigketika saya memerlukan izin sudo.

Mitchell Tracy
sumber
0
du -ahd1 | sort -hr | head -10

berikut ini adalah deskripsi -dopsi di du --help:

-d, --max-depth = N mencetak total untuk direktori (atau file, dengan --all) hanya jika itu adalah N atau lebih sedikit level di bawah argumen baris perintah; --max-depth = 0 sama dengan --summarize

luochen1990
sumber
Meskipun ini dapat membantu menyelesaikan masalah, itu tidak menjelaskan mengapa dan / atau bagaimana mengatasi masalah tersebut. Memberikan konteks tambahan ini akan secara signifikan meningkatkan nilai pendidikan jangka panjangnya. Harap edit jawaban Anda untuk menambahkan penjelasan, termasuk batasan dan asumsi apa yang berlaku. Terima kasih.
fixer1234
0

Perintah ini akan membantu Anda memeriksa penggunaan disk yang masuk ke direktori dan menjalankan yang berikut ini.
"du -sch. [!.] * * | sort -h"

Berikut ini adalah demo cara menghitung penggunaan disk dari direktori tertentu. Saya telah membuat direktori bernama Du_sh dan membuat dua file (satu tersembunyi 10 MB dan normal 20 MB) di dalamnya.

nikhil@debian:~$ mkdir Du_sh nikhil@debian:~$ cd Du_sh/ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=.10MB bs=1024 count=10240 10240+0 records in 10240+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0299941 s, 350 MB/s nikhil@debian:~/Du_sh$ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=20MB bs=2048 count=10240 10240+0 records in 10240+0 records out 20971520 bytes (21 MB, 20 MiB) copied, 0.0342258 s, 613 MB/s nikhil@debian:~/Du_sh$ du -sch .[!.]* * 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$ du -sch .[!.]* * | sort -h 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$

Nix Nikhil
sumber