Leerzeichen aus Dateinamen ersetzen in der Bash

Oft kommt es vor, dass man eine Fülle von Dateinamen hat und diese gerade für den Webserver problematisch erscheinen. Sei es darum, dass die URLs nicht mehr schön lesbar sind oder, dass es auch mit anderen Skripten nicht einwandfrei funktioniert, da man hier dann mit \ oder "" arbeiten müsste.
Als Beispiel haben wir hier einen Ordner mit dem Inhalt folgender Dateien:
Video 1.mp4 -> wird zu Video_1.mp4
Video 2.mp4 -> wird zu Video_2.mp4
Video 3.mp4 -> wird zu Video_3.mp4
Video 4.mp4 -> wird zu Video_4.mp4
Video 5.mp4 -> wird zu Video_5.mp4
Die Leerzeichen sollen automatisch ersetzt werden durch Unterstriche ( _ ). Wie gehen wir vor?
Wir können den Ordner mit dem find-Befehl nach Dateien, die ein Leerzeichen enthalten, durchsuchen lassen z.B. mit:
find -name "* *" -type f
Nun sehen wir alle Dateien jedoch ist noch nichts passiert. Wir können mit der Ausgabe hier arbeiten und nun einen Zusatzbefehl ausführen getrennt durch einen PIPE -> |
Ersetzt bei Dateien die Leerzeichen durch einen Unterstrich:
find -name "* *" -type f | rename 's/ /_/g'
Der "rename"-Befehl nach der Pipe mit einer Regular Expression sorgt dafür, dass die Leerzeichen durch ein _ ersetzt werden. Da wir mit dem find-Befehl die type f angegeben haben, werden noch files ersetzt und keine Ordner.
Will man eben auch Ordner ersetzen, kann man hier statt dem f einfach ein d (für directories) angeben.
Ersetzt bei Ordnern die Leerzeichen durch einen Unterstrich:
find -name "* *" -type d | rename 's/ /_/g'

DER NEWSLETTER FÜR IT-BEGEISTERTE

Trag dich ein für den Newsletter und bleib auf dem Laufenden über alle neuesten Aktionen und IT-News!

Wir senden keinen Spam! Erfahre mehr in unserer Datenschutzerklärung.