Leerzeichen durch Unterstriche ersetzen

#1

Hallo, ich möchte endlich mal alle meine Dateien "richtig" umbenennen, dh. sämtliche Leerzeichen in den Dateinamen durch Unterstriche ersetzen. Und das jeweils in einem Ordner inklusive aller Unterordner. Wie stelle ich das am Besten an?

Gruß Scruggs

#2

Am besten benutzt Du dazu einen "batch renamer" wie krename (KDE) oder gprename, gibt bestimmt auch noch andere.
Bei Xfce ist sogar schon einer enthalten, heisst auf deutsch "Massenumbenennen".

Alternativ dazu, aber komplizierter, ist das Kommandozeilentool perl-rename, z.B.
perl-rename 's/ /\_/g' dateiname.

2 Likes
#3

Was ist denn an perl-rename komplizierter? Wenn man die 's/ / /g'-Syntax gewohnt ist gibt es nichts einfacheres. Mir waren all diese GUI-Lösungen zu umständlich. Ich habe mir ein kleines Skript geschrieben, in dem ich perl-rename (bei mir aliased zu prename) benutze, um nicht nur Leerzeichen sondern auch andere unerwünschte Zeichen in z.Bsp. meinen Podcast-Dateien zu ersetzen.
So sieht der Leerzeichenersatz bei mir wie folgt aus

prename -v "s/ /_/g" *

#4

:grin:
perl-rename ist kompliziert wenn man die's/ / /g'-Syntax nicht gewöhnt ist :slight_smile:

Ach ja, hilfŕeich ist

$ man perl-rename
1 Like
#5

Die wenigsten sind diese Syntax gewohnt.
Neulinge können wahrscheinlich überhaupt nix damit anfangen.

1 Like
#6

Schon gut. Habe ich also endlich meinen ersten CLI-Nerd-Punkt erhalten :smiley:
Schön, dass Scruggs eine für sie/ihn passende Lösung bekommen hat.

3 Likes
#7

Danke Euch Allen für die schnelle Lösung! Ich werde mich mal am WE damit beschäftigen. Klingt so, als hätte ich noch ne ganze Menge zu lernen :thinking:

LG Scruggs

#8

Wie schon gesagt gibt es dafür grafische Tools. Ich finde aber auch, dass das ein prädestiniertes Beispiel für ein Bash-Skript mit sed ist. Wer Interesse daran hat kann gern versuchen selbst eins zu schreiben und in einem Testverzeichnis zu testen.

Hier mein Ansatz für alle Interessierten

Das Skript verwendet das aktuelle Verzeichnis oder das im ersten Parameter.

#!/bin/bash
if [[ $# -eq 0 ]]
then
     path=$PWD
else
    path=$1
fi
for file in $path/*
do
    mv "$file" "$( echo $file | sed s/\ /_/g)"
done
1 Like
#9

Hab es jetzt erstmal mit KRename versucht und zur vollsten Zufriedenheit erledigen können. Sicher werde ich mir bei Gelegenheit auch mal die "anderen" Wege genauer ansehen ...

LG Scruggs

2 Likes