Der Befehl du analysiert keine versteckten Verzeichnisse

25

Ich möchte die Menge des von einem Verzeichnis belegten Speicherplatzes mit dem folgenden Befehl abschätzen.

du -sh dir_name

das berechnet die versteckten Verzeichnisse nicht. In der Manpage von du gibt es keine Infos dazu. Berechnen des von den Verzeichnissen verwendeten Speicherplatzes, einschließlich der versteckten Dateien.

Talespin_Kit
quelle

Antworten:

13

Tatsächlich ist hier der Beweis:

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

Mit dieser -aOption wird explizit angezeigt, welche Dateien gezählt wurden.

Benutzt du du *?

stivlo
quelle
3
+1 für... you maybe using "du *" ?
sehe
2
Ich benutze kein "du *". Ich habe vergessen in der Frage zu erwähnen, dass ich die Gesamtzusammenfassung brauche. Wenn ich also sowohl -a als auch -s wie in du -as verwende, wird die Fehlermeldung "du: kann nicht alle Einträge zusammenfassen und anzeigen" angezeigt. Dies ist ein Problem. Die andere Sache ist, dass ich selbst mit du -ai nur die Dateien der ersten Ebene sehen kann. dh Dateien in versteckten Verzeichnissen können nicht angezeigt werden.
Talespin_Kit
1
Ich habe gerade -a hinzugefügt, um alle Dateien anzuzeigen, die gezählt werden. Fügen Sie einfach nicht dieses Flag hinzu, es wirkt sich nur auf die Anzeige aus, nicht auf die Gesamtsummen. Ich habe Ihnen ein Gegenbeispiel gezeigt, dass stattdessen versteckte Verzeichnisse gezählt werden.
Stivlo
1
Jetzt habe ich das Problem gefunden. Das Problem war, dass das versteckte Verzeichnis ein symbolischer Link war, also musste ich "du -Lsh dir_name" verwenden. Vielen Dank.
Talespin_Kit
1
Ah, ich verstehe, froh, dass Sie es gefunden haben, Prost.
Stivlo
53

Dieser Befehl zeigt Ihnen die zusammengefasste Größe der versteckten Verzeichnisse

du -hs .[^.]*

ecerutti
quelle
1
Das ist genau das, wonach ich gesucht habe, danke :)
Nikana Reklawyks
Dies ist die richtige Lösung
3pns
Es wäre fantastisch, wenn Sie ein bisschen die Magie dahinter erklären könnten. Es würde helfen, eine Antwort zu finden, die sowohl versteckte als auch nicht versteckte Dateien und Verzeichnisse enthält.
Kumetix
13

Der richtige Befehl lautet: du -hs $(ls -A)

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

du -hs .* *Wie in einer anderen Antwort erwähnt, ist dies nicht der Fall, wenn Sie alle Dateien und Unterverzeichnisse (einschließlich der versteckten) auflisten möchten.

Beispiel

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

Warum verhält es dusich so? Da Sie verwenden -s, die das Ergebnis zusammenfassen und dass alle Dateien und Unterverzeichnisse untergeordnet sind ., werden du -hssie nicht aufgelistet!

Guillaume Missonnier
quelle
11

Zu Ihrer Information , um die Größe zu schätzen, die von verschiedenen Verzeichnissen belegt wird, ist es viel besser, ncdu zu verwenden

Sie können in der ncurses-Benutzeroberfläche zwischen verschiedenen Verzeichnissen navigieren und die Größe der einzelnen Verzeichnisse anzeigen. Wenn ich du verwende, muss ich den Befehl du für jedes Verzeichnis ausführen, für das ich eine Prüfung durchführen möchte, was umständlich sein kann. Sie können die Verzeichnisse auch in der GUI von ncurses nach der belegten Größe sortieren.

Abhijeet Rastogi
quelle
1
Bitte bearbeiten Sie Ihre Antwort, um anzugeben, warum Sie glauben, dass ncdu "viel besser" ist. Die verlinkte Seite sagt eigentlich nichts darüber aus, außer dass es sich um eine Ncurses-basierte Version von handelt du. Abgesehen von einer schickeren Anzeigemethode gibt es keinen offensichtlichen Hinweis auf einen Funktionsunterschied.
Dave Sherohman
Ich denke, die Fähigkeit, Ihre Anfrage dynamisch anzupassen, ist ein großer Vorteil. Ich kann ncdu auf ~ ausführen, herausfinden, welche Verzeichnisse den meisten Speicherplatz belegen, und dann direkt in diese eintauchen. Es gibt Ihnen auch die dMöglichkeit, Verzeichnisse zu löschen, sodass Sie direkt von der Benutzeroberfläche aus bereinigen können.
User88974
5

Es tut und tut es nicht. Beispiel:

Im Home-Verzeichnis: (nur ein Benutzer vorhanden)

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

im Benutzerverzeichnis: (großer Unterschied zwischen den Summen)

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

und der Grund ist:

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

du berechnet ausgeblendete Verzeichnisse beim Abstieg in Unterverzeichnisse, aber im aktuellen Verzeichnis stimmt das * einfach nicht mit dem .directory_name-Muster überein, sodass die verborgenen Elemente des aktuellen Verzeichnisses weggelassen werden.

Ich brauchte einige Zeit, um herauszufinden, und wie Shadyabhi empfiehlt, wäre es offensichtlich gewesen, wenn ich ncdu verwendet hätte.

bonyiii
quelle
1

Der richtige Befehl lautet: du -hs .* *

Spatz
quelle
Einige zusätzliche Informationen würden dies zu einer akzeptablen Antwort machen.
Ramhound
1

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

Dies gibt Ihnen:

  • Größe der versteckten Dateien / Verzeichnisse
  • Größe der nicht versteckten Dateien / Verzeichnisse
  • Gesamtsumme des aktuellen Verzeichnisses

Außerdem wird die Ausgabe sortiert, um die Anzeige der größten Ausgabe zu vereinfachen. Ich habe dies auch zu einem Alias ​​in meiner ~/.bash_aliasesDatei gemacht.

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

Jetzt kann ich einfach ausführen big, um die größten Verzeichnisse in einem Verzeichnis zu finden, und sbigwenn ich Sudo-Berechtigungen benötige.

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

Es folgt die Beschreibung der -dOption in du --help:

-d, --max-depth = N gibt die Gesamtsumme für ein Verzeichnis (oder eine Datei mit --all) nur dann aus, wenn sich N oder weniger Ebenen unter dem Befehlszeilenargument befinden. --max-depth = 0 ist dasselbe wie --summarize

luochen1990
quelle
Dies kann zwar zur Lösung des Problems beitragen, erklärt jedoch nicht, warum und / oder wie das Problem behoben wird. Die Bereitstellung dieses zusätzlichen Kontexts würde den langfristigen Bildungswert erheblich verbessern. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, einschließlich der geltenden Einschränkungen und Annahmen. Vielen Dank.
Fixer1234
0

Mit diesem Befehl können Sie überprüfen, ob die Festplatte im Verzeichnis verwendet wird, und Folgendes ausführen.
"du -sch. [!.] * * | sort -h"

Hier ist die Demo zur Berechnung der Festplattennutzung eines bestimmten Verzeichnisses. Ich habe ein Verzeichnis mit dem Namen Du_sh erstellt und darin zwei Dateien (eine versteckte 10 MB und normale 20 MB) erstellt.

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
quelle