Speicherbelegung eines Dateityps rekursiv in allen Unterordnern ermitteln

Avatar von Christoph Langner

2 Min. Lesezeit

Wie viel Platz belegen alle JPGs in einem Verzeichnisbaum? find, du und awk beantworten die Frage in einer Zeile.

Ich stand vorhin vor der Aufgabe, herauszufinden, wie viel Speicherplatz sämtliche JPG-Bilder und MOV-Videos in einer weit und tief verzweigten Ordnerstruktur mit unzähligen Dateien ganz unterschiedlichen Typs belegen. Die klassischen Befehle du, df und Co. helfen hier auf den ersten Blick nicht direkt weiter, da ich eben rekursiv den Speicherplatz dieser beiden Dateitypen ermitteln möchte.

Die Aufgabe war letztendlich gar nicht so einfach zu lösen: Mit find fische ich mir rekursiv sämtliche Dateien eines Typs aus den Unterverzeichnissen, du ermittelt daraufhin die Dateigröße jeder Datei. Danach schnippel ich mir mit tail -1 die am Anfang stehende Dateigröße aus der Ausgabe und addiere dann mit awk Zeile für Zeile der Ausgabe zusammen. Kommt ihr auf eine bessere, weil schlankere Lösung? Mich würde das mal interessieren.


$ find . -type f -name "*.JPG" -exec du -shc {} + | tail -1 | awk '{print $1}'
9,8G
$ find . -type f -name "*.MOV" -exec du -shc {} + | tail -1 | awk '{print $1}'
15G

Wer solch eine Aufgabe öfters einmal zu bewältigen hat, der kann sich das Kommando beispielsweise als Alias in die .bashrc eintragen, so muss man es nicht immer komplett neu eintippen oder aus der History herausfischen. Alternativ könnt ihr euch aber auch einmal das kleine Perl-Skript duext ansehen. Es rechnet nicht nur die Dateigrößen eines Dateityps zusammen, sondern listet die rekursiv zusammengerechnete Belegung jedes in den Unterverzeichnissen vorkommenden Dateityps inklusive der Anzahl der Dateien auf.


## duext herunterladen, umbenennen und ausführbar machen
$ wget https://sites.google.com/site/mailvortex/unix-and-linux/duext/duext.pl.txt
$ mv duext.pl.txt duext
$ chmod +x duext

## duext beispielsweise auf das Homeverzeichnis loslassen
$ ./duext /home/beispiel
soh: 2 files, 7409 bytes
cmeta: 4 files, 52 bytes
png: 12112 files, 791262261 bytes
...
gpg: 3 files, 40 bytes
ots: 1 files, 19030 bytes
odt: 7 files, 226643 bytes
/////// 336 unique file extensions
/////// total 57098 files, 65985706195 bytes

## Nur die Belegung von JPG- und PNG-Dateien ausgeben
$ ./duext /home/beispiel | grep -E 'jpg|png'
png: 12114 files, 791559846 bytes
jpg: 2199 files, 5751992470 bytes

Ähnliche Beiträge

3 Kommentare zu „Speicherbelegung eines Dateityps rekursiv in allen Unterordnern ermitteln“

  1. Avatar von martin

    Für find würde ich statt -name besser -iname nehmen. Gerade bei Extensions ist die Groß/Kleinschreibung doch häufig durcheinander.

  2. Avatar von it_supertramp

    Sehr coole Lösung.
    Hab es grad eine Viertelstunde versucht mit ncdu zu lösen.

    Die --exclude Syntax erlaubt das entfernen von bestimmten Dateitypen. Leider hab ich es nicht hinbekommen, alles ausser *.jpg zu entfernen. Die Regex Syntax erlaubt leider keine negativen lookaheads.

    Danke für die tollen Blogartikel!

    Gruß @it_supertramp

  3. Avatar von brick

    Nach ein bisschen googeln 😉 finde ich folgende Lösung recht elegant:

    $ find . -type f -iname '*.JPG' -print0 | du -ch --files0-from=- | tail -1
    $ find . -type f -iname '*.MOV' -print0 | du -ch --files0-from=- | tail -1

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Markdown wird unterstützt: **fett**, _kursiv_, [Linktext](URL), `Code`, Zeilen mit - für Listen, 1. für nummerierte Listen, dreifache Backticks für Codeblöcke.

Sicherheitsabfrage: Welches Logo ist das? Beschreibung des Logos: Orangefarbener Ring mit Punkt in der Mitte, links ragen drei Arme heraus.

Linux und Ich — Speicherbelegung eines Dateityps rekursiv in allen Unterordnern ermitteln
https://linuxundich.de/speicherbelegung-eines-dateityps-rekursiv-unterordner-ermitteln/ — gedruckt am 4. Oktober 2026