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 kleines 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 Datein 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
Für find würde ich statt
-name
besser-iname
nehmen. Gerade bei Extensions ist die Groß/Kleinschreibung doch häufig durcheinander.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
Nach ein bisschen googeln 😉 finde ich folgende Lösung recht elegant: