du überspringst symbolische Links

8

Das Standardverhalten von duauf meinem System ist nicht das richtige Standardverhalten.

Wenn ich lsmeinen /dataOrdner habe, sehe ich (Entfernen der Dinge, die nicht wichtig sind):

ghs
ghsb -> ghs
hope
rssf -> roper
roper

In jedem Ordner befindet sich eine Reihe von Ordnern mit Nummern als Namen. Ich möchte die Gesamtgröße aller genannten Ordner ermitteln 14, daher verwende ich:

du -s /data/*/14

Und ich verstehe ...

161176 /data/ghs/14
161176 /data/ghsb/14
8 /data/hope/14
681564 /data/rssf/14
681564 /data/roper/14

Was ich will ist nur:

161176 /data/ghs/14
8 /data/hope/14
681564 /data/roper/14

Ich möchte die symbolischen Links nicht sehen. Ich habe versucht -L, -D, -S, etc. Ich immer die symbolischen Links. Gibt es eine Möglichkeit, sie zu entfernen?

Kainaw
quelle

Antworten:

14

Dadurch werden dudie symbolischen Verknüpfungen nicht aufgelöst. Es ist deine Muschel.

*ist eine Muschelkugel; Es wird von der Shell erweitert, bevor ein Befehl ausgeführt wird. Der Befehl, den Sie ausführen, lautet also:

du -s /data/ghs/14 /data/ghsb/14 /data/hope/14 /data/rssf/14 /data/roper/14

Wenn es sich bei Ihrer Shell um Bash handelt, können Sie nicht festlegen, dass Symlinks nicht erweitert werden sollen. Sie können jedoch findstattdessen (GNU-Version) verwenden:

find /data -mindepth 2 -maxdepth 2 -type d -name 14 -exec du -s {} +
Patrick
quelle
2
Funktioniert perfekt. Kann jemand die Verwendung von {}und +hier erklären ?
Victor Wong
2

Stellen duüberspringen symbolische Links:

duist nicht klug genug, um keine Links zu verfolgen. Standardmäßig findwerden Symlinks übersprungen. So eine unheilige Allianz zwischen dem Erstellen find, duund awkwird die richtige dunkle Magie Beschwörung:

find /home/somedirectory/ -exec du -s {} + | awk '{total = total + $1}END{print total}'

Produziert:

145070492

So erzwingen Sie, dass die Ausgabe für Menschen lesbar ist:

find /home/somedirectory/ -exec du -s {} + | awk '{total = total + $1}END{print (total / 1024 / 1024) "MB"}'

Produziert:

138,35 MB

Was ist denn hier los:

/home/somedirectory/      directory to search.
-exec du -s +             run du -s over the results, producing bytes
awk '...'                 get the first token of every line and add them up,
                          dividing by 1024 twice to produce MB
Eric Leschinski
quelle
1
sollte seincat /tmp/tmp.txt
Gu Wang