Dlaczego to nie pokazuje ukrytych plików / folderów?

139

Przeglądałem mój system, du -sch ./*aby znaleźć duże bezużyteczne pliki, które mogłem zgromadzić bez powodu, gdy znalazłem to:

$ 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

Jak mogę pokazać ukryte pliki? du -sch ./.*daje taki sam wynik jak du -sch ./*.

Dr_Bunsen
źródło
du -hs .[^.]* *dla wszystkich ukrytych plików, wyłączając . i ..jakie inne odpowiedzi wydają się być brakuje.
laggingreflex

Odpowiedzi:

245

Posługiwać się

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

w twoim katalogu domowym.

Alternatywnie polecenie, którego najczęściej używam, to

ncdu

Łatwy w instalacji w razie potrzeby:

sudo apt-get install ncdu
don.joey
źródło
1
Dzięki, jesteś geniuszem. Nie jestem mistrzem w bashu, co robisz [!.]?
Dr_Bunsen
10
@Dr_Bunsen: To glob, który zawiera listę wszystkich plików, które zaczynają się od jednego .. Oto fajna sztuczka: jeśli nie wiesz, co robi rzecz wyglądająca na glob, spróbuj uruchomić echo .[!.]*lub cokolwiek innego. Powłoka następnie rozszerzy glob i przekaże go do echo, drukując listę wynikowych plików.
Tikhon Jelvis
14
To nie wyświetla listy plików o nazwach podobnych ..fooi może powodować problemy z plikami, których nazwa zaczyna się od -. Może również zawieść, jeśli lista argumentów jest za długa. du -ahd1nie miałby żadnego z tych problemów.
Stéphane Chazelas
Nieistotny do pierwotnego pytania, ale istotne dla dnia na dzień użytkowania: To może być przydatne do włączenia przełącznika „c”, aby wyświetlić całkowity i zmienić kolejność opcji trochę, aby ta komenda trochę łatwiejsze do zapamiętania: du -cksh .[!.]* * |sort -h.
Daddy32
56

Mam to samo pytanie na liście mailingowej coreutils, ponieważ trudno mi było zapamiętać to dziwne polecenie @ don.joey. Bob Proulx zaproponował lepsze, bardziej naturalne polecenie: du -ahd1 | sort -h

Jeśli chcesz wyświetlić listę wszystkich plików w bieżącym katalogu, użyj albo „.” lub nie podawaj żadnych argumentów pliku. Możesz także użyć opcji -d, --max-depth = N.

Spróbuj tego:

du -hd1

Jurij Kolesnykov
źródło
7
Dodaj -aopcję, aby była równoważna.
Stéphane Chazelas
6
To powinna być zaakceptowana odpowiedź, ponieważ jest łatwiejsza do zapamiętania i zrozumienia.
Bastien,
8

Gdy uruchomisz to samo polecenie w katalogu, nie uwzględnia to ukrytych plików, które zaczynają się .od zliczenia. Jeśli na przykład masz zainstalowanego Steam, domyślnie instaluje się gry pod ~/.local/share/Steam/nim, a on sam również tam jest zainstalowany.

Pod bash najwyraźniej musisz uruchomić, du -sch .[!.]* *ponieważ nie rozwija on poprawnie .*globu. Pod powłoką zshlub innymi powłokami du -sch * .*powinien działać, podobnie jak .*powinien zostać rozwinięty, aby uwzględnić listę wszystkich ukrytych plików w bieżącym katalogu.

dobey
źródło
DOBRZE. Najwyraźniej jest wtedy problem z bash, ponieważ wydaje się, że nie rozwija się prawidłowo .*. Ale du -sch * .*robi właściwą rzecz pod zsh. Pod bashem du -sch .*wydaje się liczyć, .ale nie rozwija się, aby wyświetlać pliki pojedynczo.
dobey,
Dla mnie. * Rozwija się również do ../* i dlatego du wychodzi z katalogu, w którym chcę zobaczyć jego rozmiar! Zamiast tego musiałem użyć ./.[^.]*.
Ari
To zsh i wszystkie powłoki pochodzące z powłoki Forsyth (obecnie są to głównie tylko pdksh i jego pochodne), które działają poprawnie i nie rozszerzają się. i tu. Wszystkie inne powłoki podobne do Bourne'a (bash, Bourne, AT&T ksh, dash, yash ...). W zshskorzystałbyś du -sch -- *(D)jednak nie du -sch -- * .*.
Stéphane Chazelas