Kategorie
GNU/Linux
Veröffentlicht
Lesezeit
2 Minuten
Diskussion
3 Kommentare

GNU/Linux

Speicherbelegung eines Dateityps rekursiv in allen Unterordnern ermitteln

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.

Terminal5 Zeilen

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.

Terminal22 Zeilen

## 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

Diskussion 3 Kommentare, zuletzt am

brick „Nach ein bisschen googeln 😉 finde ich folgende Lösung recht elegant: $ find . -type f -iname '.JPG' -print0 | du -ch –files0-from=- | …“

Alle 3 Kommentare lesenKommentar schreiben

3 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

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.

Sicherheitsprüfung: läuft automatisch, du musst nichts tun.

  1. Avatar von martin
    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

Mehr aus dem Blog

Gerade diskutiert

Kategorien

Schlagwörter

Zeilen sind breiter als der Bildschirm. Quer halten zeigt mehr – oder Umbrechen einschalten.

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