Dateimengen bearbeiten

Aus Fedorawiki.de

Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der HOWTO Sammlung

Dieser Artikel beschreibt, wie man mit einfachen Mitteln große Mengen an Dateien verarbeiten kann.

Inhaltsverzeichnis

Hintergrund

Auch wenn es mittlerweile unter Linux jede Menge grafische Oberflächen für alle Zwecke gibt, greifen viele Nutzer gerne auf die Bash zurück, weil man dort mit einfachen Mitteln und wenig Aufwand sehr viel erreichen kann.

Hier wird vorgestellt, wie man mehrere Dateien auf einmal bearbeiten kann. Mögliche Anwendungen sind das Umwandeln von mehreren *.wav Dateien in *.ogg, das Umwandeln von mehreren *.ps Dateien in *.pdf oder ähnliches.

Das Prinzip: die Schleife

Das Prinzip ist, dass man eine Schleife aufbaut, die so lange läuft, wie Dateien da sind, und mit jeder neuen Datei wieder das gleiche macht. Siehe auch Schleifen mit Bash.

Der grundlegende Aufbau

Die Schleife beginnt mit dem Befehl for - er beschriebt, für welche Dateien die folgenden Aktionen durchgeführt werden sollen.

Es folgt do - hier wird gesagt, was getan werden soll.

Den Abschluss bildet done - es markiert das Ende der Schleife.

Ein einfaches (und sinnloses) Beispiel ist:

for i in *.html;do echo "Hallo";done

Dieser Befehl sucht im aktuellen Verzeichnis nach Dateien mit der Endung html, und schreibt für jede gefundene Datei das Wort Hallo in die Ausgabe, wofür der Befehl echo "Hallo" genutzt wird.

Beim Abschnitt do können natürlich auch mehrere Befehle nacheinander abgearbeitet werden. Nur der erste braucht dann das voranstehende Wort do. Alle anderen Befehle werden durch ein Semikolon abgetrennt. Unser sinnloses Beispiel würde dann wie folgt aussehen:

for i in *.html;do echo "Hallo";echo "hier";echo "wasauchimmer";done

Erklärte Beispiele

ps2pdf

Der befehl ps2pdf wandelt eine Postscript Datei in eine PDF Datei um. Die Schwierigkeit ist dabei, dass ps2pdf nicht nur einen Dateinamen zum Umwandeln erwartet, sondern auch einen Dateinamen, wie die neue Datei heißen muss.

Dafür muss der Befehlsteil nach do also eine Übergabe des Dateinamens, aber mit einer anderen Endung enthalten. Das geht so:

for i in *; do ps2pdf $i `basename $i .ps`.pdf;done

Dabei wird das Programm basename genutzt, dass bei Angabe des Dateinamens und der Endung nur den Stammnamen ohne Endung zurück gibt.