Einfache FOR-Schleife zum Zeit sparen!

Als Tip für alle möglichen Bearbeitungsschritte auf der Kommandozeile ist eine einfache FOR-Schleife ganz praktisch. Dazu gibt es zwei Varianten, die man sich vereinfachten abspeichern kann:

1. Du suchst alle Dateien bestimmter Endung und willst sie z.B. löschen Dann:

for in in *DOC; do rm $i; done

Nötig ist dies vor allem dann, wenn eine Kommandozeile sonst zu lang und nicht mehr ausgeführt wird. Sonst klappt natürlich auch ein einfache „rm *DOC“

2. Angenommen man will einen Haufen JPG bearbeiten z:b. mit ImageMagick und die Ergebnisse in eine neue Datei schreiben:

for i in *JPG; do convert -resize 50% $i ${i%JPG}jpg ; done

Letzteres verkleinert alle Dateien mit JPG am Ende um 50% und speichert sie mit gleichem Namen aber mit Endung „jpg“ ab. Das ist schon eine übliche Möglichkeit, weil Kameras ja auf FAT-Dateisystemen schreiben und die keinen Unterschied zwischen Klein- und Großschreibung machen. Daher sind alle Dateien groß geschrieben. WordPress.com erkennt aber z.B. keine Bilder mit „JPG“ am Ende, sondern nur mit „jpg“.

Um zu testen empfehle ich den eigentlichen Befehl (wie z.B. „rm“ oder „convert“) durch „echo“ zu ersetzen. Dadurch gibt die Schleife erst mal nur aus, was sie tun würde. Auch zu empfehlen ist es bei komplexen Aufgaben ein wenig interaktivität einzubauen. Also sowas wie „rm -i“ – dann müsst ihr immer jedes Löschen bestätigen. Ich habe auch schon mal Skript geschrieben, bei denen eine Variable der Pfad war und wo ein Verzeichnis gelöscht werden sollte. Allerdings war die Variable dann leer und somit der Pfad root („/“). Das Skript war also dabei ALLES zu löschen. Dafür braucht man dann naturlich komplexere Skripte, bei denen man dann vorher prüft, dass eine Variable nicht leer sein darf und nicht gleich „/“. Das obige Mini-Skript ist ziemlich universell einsetzbar. Man kann es auch immer wieder anpassen, um z.B. dann bestimmte Dateiversionen, sofern sie besser sind als die alten, wieder auf den Ort der Originale zu verschieben mit „mv“. Gerade bei Dateioperationen mit vielen zig Dateien kann einem das viele Stunden Arbeit ersparen. Gern geschehen.