du meldet, dass die Verzeichnisgröße viel größer ist als die Summe ihres Inhalts

7

Das Ausführen du -shc *im obersten Verzeichnis ergibt 110Geinen bestimmten Ordner, während das Ausführen des gleichen Befehls in diesem Ordner eine Gesamtgröße von ergibt 11G. Wie ist das möglich?

Plattformdetails: Betriebssystem: CentOS 6.6 x86_64 Laufwerkstyp: Solid-State Datenträgertyp: RAID 6-Array RAID-Controller: LSI MegaRAID SAS-Dateisystem: ext3

orodbhen
quelle

Antworten:

7

Höchstwahrscheinlich haben Sie versteckte Dateien im Ordner. Der Punkt ist, dass glob *nur Dateien und Ordner auswählt, die nicht mit beginnen .. Wenn sie dies tun, werden sie nicht an das duKommando übergeben. Auf der anderen Seite erhalten Sie vom obersten Verzeichnis die Größe des gesamten Verzeichnisses, einschließlich Punktdateien.

Um alle Dateien in einem bestimmten Ordner, einschließlich der versteckten, abzugleichen, versuchen Sie (mit bash)

du -shc -- {.[!.],..?,}*

oder stellen Sie die Option dotglobso ein, dass sie auch *zu versteckten Dateien passt:

shopt -s dotglob
du -shc -- *
jimmij
quelle
Junge, schäme ich mich? Daran habe ich nicht gedacht. Ich wünschte, es gäbe eine einfachere Shell-Syntax, um versteckte Dateien in die Erweiterung aufzunehmen. Besonders bei Befehlen wie du, bei denen normalerweise alles im Ordner angezeigt werden soll. Vielen Dank.
Orodbhen
@orodbhen Dieser Glob ist ein bisschen nerdig, um sich um "ungewöhnliche" Möglichkeiten zu kümmern, wie Dateien, die von zwei Punkten ausgehen ..abcoder von Bindestrichen ausgehen -abc. Meistens könnte man es einfach machen du -shc * .??*oder in kürzerer Form du -shc {.??,}*. Sie können es nicht loswerden ?, das übergeordnete Verzeichnis nicht ..zu berücksichtigen. Sie können die dotglobOption auch in bash festlegen , sodass sie standardmäßig versteckte Dateien enthält (das werde ich der Antwort hinzufügen).
Jimmyij
@orodbhen In zsh: *(D)(oder machen Sie die Aufnahme von Punktdateien zur Standardeinstellung mit setopt glob_dots).
Gilles 'SO - hör auf böse zu sein'
Ich benutze seit 12 Jahren die Linux-Befehlszeile und habe noch nie von dem Befehl shopt gehört!
HDave