Mengapa ini tidak menunjukkan file / folder tersembunyi?

140

Saya sedang mencari-cari di dalam sistem saya du -sch ./*untuk menemukan file-file besar yang tidak berguna yang mungkin saya timbun tanpa alasan, ketika saya menemukan ini:

$ du -sch ./*
du: cannot read directory ‘./drbunsen/.gvfs’: Permission denied
du: cannot read directory ‘./drbunsen/.cache/dconf’: Permission denied
18G ./drbunsen
18G total

$ cd drbunsen/
$ du -sch ./*
601M ./Desktop
20K ./Documents
598M ./Downloads
4.0K ./flash
4.0K ./Music
8.0M ./Pictures
4.0K ./Public
4.0K ./Templates
4.0K ./Ubuntu One
8.0K ./Videos
11G ./VirtualBox VMs
6.9M ./workspace
12G total

Bagaimana cara membuat file tersembunyi terlihat? du -sch ./.*memberikan hasil yang sama dengan du -sch ./*.

Dr_Bunsen
sumber
du -hs .[^.]* *untuk semua file yang tersembunyi, tidak termasuk . dan ..jawaban lain yang sepertinya tidak ada.
laggingreflex

Jawaban:

245

Menggunakan

du -sch .[!.]* * |sort -h

di folder rumah Anda.

Atau, perintah yang paling sering saya gunakan adalah

ncdu

Mudah dipasang jika diperlukan:

sudo apt-get install ncdu
jangan
sumber
1
Terima kasih, kamu jenius. Saya bukan ahli dalam bash, apa yang dilakukan [!.] Lakukan?
Dr_Bunsen
10
@Dr_Bunsen: Ini adalah glob yang mencantumkan semua file yang dimulai dengan satu .. Ini trik yang rapi: jika Anda tidak tahu apa yang tampak seperti bola mata global, coba jalankan echo .[!.]*atau apa pun. Shell kemudian akan memperluas gumpalan dan menyebarkannya echo, mencetak daftar file yang dihasilkan.
Tikhon Jelvis
14
Itu gagal mendaftar file bernama seperti ..foodan dapat menyebabkan masalah dengan file yang namanya dimulai -. Bisa juga gagal jika daftar arg terlalu panjang. du -ahd1tidak akan memiliki masalah itu.
Stéphane Chazelas
Tidak relevan dengan pertanyaan awal, namun relevan untuk penggunaan sehari-hari: Ini mungkin berguna untuk memasukkan 'c' saklar untuk menampilkan total dan untuk menyusun ulang pilihan sedikit untuk membuat perintah ini sedikit lebih mudah untuk diingat: du -cksh .[!.]* * |sort -h.
Daddy32
56

Saya memiliki pertanyaan yang sama di milis coreutils, karena sulit bagi saya untuk mengingat perintah aneh ini oleh @ don.joey. Dan Bob Proulx mengusulkan perintah yang lebih baik dan lebih alami: du -ahd1 | sort -h

Jika Anda ingin membuat daftar semua file di direktori saat ini maka gunakan '.' atau jangan berikan argumen file sama sekali. Anda juga mungkin ingin menggunakan opsi -d, --max-depth = N.

Coba ini:

du -hd1

Yurii Kolesnykov
sumber
7
Tambahkan -aopsi untuk menjadi setara.
Stéphane Chazelas
6
Ini harus menjadi jawaban yang diterima karena lebih sederhana dan lebih mudah diingat dan dipahami.
Bastien
8

Saat Anda menjalankan perintah yang sama di dalam direktori, itu tidak termasuk file tersembunyi yang dimulai dengan .dalam hitungan. Jika Anda memiliki Steam misalnya diinstal, itu default untuk menginstal permainan di bawah ~/.local/share/Steam/dan itu sendiri diinstal di sana juga.

Di bawah bash, Anda tampaknya harus menjalankannya du -sch .[!.]* *karena itu tidak memperluas .*glob. Di bawah zshatau shell lain, du -sch * .*harus berfungsi, seperti yang .*seharusnya diperluas untuk memasukkan daftar semua file yang tersembunyi di direktori saat ini.

dobey
sumber
BAIK. Tampaknya ada masalah dengan bash, karena tampaknya tidak berkembang dengan baik .*. Tetapi du -sch * .*apakah melakukan hal yang benar di bawah zsh. Di bawah bash, du -sch .*tampaknya menghitung .tetapi tidak berkembang untuk menampilkan file satu per satu.
dobey
Bagi saya. * Juga mengembang ke ../* dan karena itu du keluar dari direktori yang ingin saya lihat ukurannya! Saya harus menggunakan ./.[^.)* sebagai gantinya.
Ari
Zsh dan semua cangkang berasal dari cangkang Forsyth (saat ini kebanyakan hanya pdksh dan turunannya) yang melakukan hal yang benar dan tidak berkembang. dan di sini. Semua shell seperti Bourne lainnya lakukan (bash, Bourne, AT&T ksh, dash, yash ...). Di zsh, Anda akan menggunakan du -sch -- *(D), bukan du -sch -- * .*.
Stéphane Chazelas