Warum werden die versteckten Dateien / Ordner nicht angezeigt?

140

Ich habe mein System mit du -sch ./*durchsucht, um die großen, nutzlosen Dateien zu finden, die ich ohne Grund auf Lager habe, als ich Folgendes fand:

$ 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

Wie mache ich versteckte Dateien sichtbar? du -sch ./.*ergibt das gleiche Ergebnis wie du -sch ./*.

Dr_Bunsen
quelle
du -hs .[^.]* *für alle versteckten Dateien, außer . und ..welche anderen Antworten fehlen.
Laggingreflex

Antworten:

245

Verwenden

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

in Ihrem privaten Ordner.

Alternativ ist der Befehl, den ich am häufigsten verwende

ncdu

Bei Bedarf einfach zu installieren:

sudo apt-get install ncdu
don.joey
quelle
1
Danke, du bist ein Genie. Ich bin kein Meister in Bash, was machst du?
Dr_Bunsen
10
@ Dr_Bunsen: Es ist ein Glob, der alle Dateien auflistet, die mit einem einzelnen beginnen .. Hier ist ein netter Trick: Wenn Sie nicht wissen, was eine global aussehende Sache tut, versuchen Sie es mit Laufen echo .[!.]*oder was auch immer. Die Shell erweitert dann den Glob und übergibt ihn an und druckt echodie Liste der resultierenden Dateien aus.
Tikhon Jelvis
14
Das kann keine Dateien mit dem Namen "like" auflisten ..foound kann Probleme mit Dateien verursachen, deren Name mit "" beginnt -. Es kann auch fehlschlagen, wenn die Argumentliste zu lang ist. du -ahd1würde keines dieser Probleme haben.
Stéphane Chazelas
Irrelevant auf die ursprüngliche Frage, aber relevant zu Tag Nutzung zu Tag: Es könnte nützlich sein ‚c‘ Schalter enthält die Gesamt anzuzeigen und die Optionen ein wenig machen diesen Befehl ein wenig einfacher neu zu ordnen zu erinnern: du -cksh .[!.]* * |sort -h.
Daddy32
56

Ich habe die gleiche Frage in der Mailingliste von coreutils, weil es mir schwer gefallen ist, mich an diesen seltsamen Befehl von @ don.joey zu erinnern. Und Bob Proulx schlug ein besseres, natürlicheres Kommando vor: du -ahd1 | sort -h

Wenn Sie alle Dateien im aktuellen Verzeichnis auflisten möchten, verwenden Sie entweder '.' oder gib ihm überhaupt keine Datei-Argumente. Sie können auch die Option -d, --max-depth = N verwenden.

Versuche dies:

du -hd1

Yurii Kolesnykov
quelle
7
Fügen Sie die entsprechende -aOption hinzu.
Stéphane Chazelas
6
Dies sollte die akzeptierte Antwort sein, da es einfacher und leichter zu merken und zu verstehen ist.
Bastien,
8

Wenn Sie denselben Befehl im Verzeichnis ausführen, werden die versteckten Dateien, die mit beginnen, nicht .mitgezählt. Wenn Sie beispielsweise Steam installiert haben, werden standardmäßig Spiele unter ~/.local/share/Steam/und dort auch selbst installiert.

Unter Bash müssen Sie anscheinend ausführen, du -sch .[!.]* *da es den .*Glob nicht richtig erweitert . Unter- zshoder andere Shells du -sch * .*sollten funktionieren, da .*sie so erweitert werden sollten, dass sie die Liste aller versteckten Dateien im aktuellen Verzeichnis enthalten.

dobey
quelle
OKAY. Es gibt dann anscheinend ein Problem mit Bash, da es nicht richtig zu expandieren scheint .*. Aber du -sch * .*macht das unter richtig zsh. Unter Bash, du -sch .*scheint zu zählen ., wird jedoch nicht erweitert, um Dateien einzeln anzuzeigen.
Dobey
Für mich. * Erweitert sich auch um ../* und deshalb verlässt du das Verzeichnis, dessen Größe ich sehen möchte! Ich musste stattdessen ./.[^.‹* verwenden.
Ari
Es sind zsh und alle von der Forsyth-Shell abgeleiteten Shells (heutzutage meistens nur pdksh und seine Derivate), die das Richtige tun und nicht expandieren. und hier. Alle anderen Bourne-ähnlichen Shells funktionieren (bash, Bourne, AT & T ksh, dash, yash ...). In zshwürdest du du -sch -- *(D)allerdings nicht verwenden du -sch -- * .*.
Stéphane Chazelas