foreach-Schleife in der tcsh
Mit der foreach-Schleife können in der tcsh Operationen auf mehreren Dateien gleichzeitig ausgeführt werden. Startet man eine foreach-Schleife, muss eine Variable deklariert werden und angegeben werden, welche Dateien modifiziert werden sollen. Danach können die Befehle, die auf den Dateien angewendet werden sollen, angegeben werden. Anschliessend wird die Schleife mit end beendet. Im folgenden Beispiel wird allen Dateien der Suffix .orig angehängt:
# ls
file0 file1 file2 file3
# foreach file (*)
foreach? mv $file $file.orig
foreach? end
# ls
file0.orig file1.orig file2.orig file3.orig
Nun können auf den Dateinamen Substitution Patterns der tcsh verwendet werden. So wird im folgenden Beispiel der Suffix .orig durch .test ersetzt:
# foreach file (*)
foreach? mv $file $file:s/.orig/.test/
foreach? end
# ls
file0.test file1.test file2.test file3.test
Soll der Suffix entfernt werden, kann dies mit $file:r gemacht werden:
# foreach file (*)
foreach? mv $file $file:r
foreach? end
# ls
file0 file1 file2 file3
Nun kann der erste Buchstabe des Dateinamens mit Hilfe von $file:u in einen Grossbuchstaben umgewandelt werden:
# foreach file (*)
foreach? mv $file $file:u
foreach? end
# ls
File0 File1 File2 File3
Umgekehrt kann der erste Buchstaben auch wieder in einen Kleinbuchstaben geändert werden:
# foreach file (*)
foreach? mv $file $file:l
foreach? end
# ls
file0 file1 file2 file3
Mehr Informationen zu der foreach-Schleife und den Substitution Patterns der tcsh findet man in der Manpage tcsh(1).
Comments
Gibt es auch eine Lösung für den Fall, dass alle Dateien einen anderen Namen haben, es aber alle in einem Verzeichnis zur Umbenennung eingeschlossen werden sollen?
Ja, wenn auf alle Dateien die gleiche Operation angewendet werden soll, funktioniert das. Zum Beispiel kannst Du allen Dateien die Endung .old hinzufügen:
# ls
alpha bar beta foo gamma
# foreach file (*)
foreach? mv $file $file.old
foreach? end
# ls
alpha.old bar.old beta.old foo.old gamma.old