Hallo zusammen,
ich hätte eine Verständnisfrage bzgl. Massenumbenennen von Dateinamen mit dem Terminal.
Vorweg: ich weiß, daß es für solche Zwecke das Programm rename für die Kommandozeile gibt, aber mich interessiert die Methode mit sed.
Hintergrund:
Ich habe aus alter Zeit einen Ordner mit einer Reihe von Tondateien, welche ein oder mehrere Leerzeichen im Dateinamen haben. Diese Leerzeichen möchte ich durch einen Unterstrich ersetzen und dabei die Methode mit "sed" nutzen.
Auf der Seite https://stackoverflow.com/questions/2709458/how-to-replace-spaces-in-file-names-using-a-bash-script fand ich eine tolle Anweisung dazu, welche auch gut funktioniert:
for f in *\ *; do mv "$f" "${f// /_}"; done
Ich möchte aber gerne die Syntax komplett verstehen; und da hapert es etwas.
Was ich verstehe (glaube ich zumindest), ist der Teil
${f// /_}Dieser Teil nutzt also die Parameter-Expansion zur Ersetzung.
Der doppelte Schrägstrich sorgt dafür, daß alle Leerzeichen durch Unterstriche ersetzt werden (und nicht nur beim ersten Vorkommen). Soweit ist´s klar, denke ich.
Es ist der erste Teil, den ich syntaxmäßig nicht verstehe:
for f in *\ *
Warum genügt nicht "for f in"? Und wie genau ist das "*\ * zu verstehen?
Vielen Dank im voraus für Eure Hilfe.
LG. Rosika ☺
Moderiert von rklm:
Thema auf Wunsch umbenannt um den Titel korrekt zu machen