Der Befehl rename benennt mehrere Dateien gleichzeitig um, indem er Muster in Dateinamen durch neue Zeichenketten ersetzt. Im Gegensatz zu mv brauchst du keine Schleifen oder komplexe Pipes.
Installation
Es gibt zwei Versionen von rename mit unterschiedlicher Syntax. Dieser Artikel behandelt die Perl-Version, die deutlich mehr Funktionen bietet.
Ubuntu/Debian:
sudo apt install rename
CentOS/Fedora:
sudo yum install prename
Arch Linux:
yay perl-rename
Syntax
rename [OPTIONEN] 'perlexpr' DATEIEN
perlexpr– Ein Perl-Ausdruck, der beschreibt, wie Dateinamen geändert werden sollen.DATEIEN– Die umzubenennenden Dateien (Wildcards wie*sind erlaubt).
Grundlegende Verwendung
Der häufigste Anwendungsfall ist der Ersetzungsoperator s/SUCHEN/ERSETZEN/:
rename 's/.css/.scss/' *.css
Dieser Befehl ändert die Endung aller .css-Dateien zu .scss. Der Ausdruck besteht aus:
s/– Leitet den Ersetzungsoperator ein..css– Das Suchmuster im Dateinamen..scss– Der Ersatztext.*.css– Wählt alle Dateien mit.css-Endung aus.
Wichtige Optionen
| Option | Beschreibung |
|---|---|
-n | Trockenlauf: zeigt geplante Umbenennungen, führt sie aber nicht aus |
-v | Zeigt jede durchgeführte Umbenennung an |
-f | Überschreibt existierende Dateien ohne Nachfrage |
Trockenlauf mit -n
Teste Umbenennungen immer zuerst mit der Option -n:
rename -n 's/.css/.scss/' *.css
Die Ausgabe zeigt, was passieren würde:
rename(datei-0.css, datei-0.scss)
rename(datei-1.css, datei-1.scss)
rename(datei-2.css, datei-2.scss)
Erst wenn die Vorschau korrekt aussieht, führst du den Befehl ohne -n aus.
Ausführliche Ausgabe mit -v
Mit -v siehst du, welche Dateien tatsächlich umbenannt wurden:
rename -v 's/.css/.scss/' *.css
datei-0.css renamed as datei-0.scss
datei-1.css renamed as datei-1.scss
datei-2.css renamed as datei-2.scss
Dateien überschreiben mit -f
Standardmäßig überschreibt rename keine existierenden Dateien. Mit -f erzwingst du das Überschreiben:
rename -f 's/.css/.scss/' *.css
Praktische Beispiele
Leerzeichen durch Unterstriche ersetzen
Der Transliterationsoperator y/ ersetzt Zeichen einzeln:
rename 'y/ /_/' *
Jedes Leerzeichen wird zu einem Unterstrich. Das ist nützlich für Dateien, die du auf der Kommandozeile ohne Anführungszeichen verwenden willst.
Dateinamen in Kleinbuchstaben umwandeln
rename 'y/A-Z/a-z/' *
Der Bereich A-Z wird auf a-z abgebildet. Aus README.TXT wird readme.txt.
Dateinamen in Großbuchstaben umwandeln
rename 'y/a-z/A-Z/' *
Dateiendung entfernen
Um .bak-Endungen zu entfernen, ersetzt du sie durch einen leeren String:
rename 's/\.bak$//' *.bak
Der Backslash vor dem Punkt maskiert das Sonderzeichen, $ stellt sicher, dass nur am Ende des Namens gematcht wird.
Verschiedene Schreibweisen vereinheitlichen
Dieser Ausdruck wandelt sowohl .jpeg als auch .JPG in .jpg um:
rename 's/\.jpe?g$/.jpg/i' *
jpe?g– Matchtjpgoderjpeg(daseist optional durch?).$– Nur am Ende des Dateinamens.i– Groß-/Kleinschreibung ignorieren.
Zusammenfassung
Mit rename benennst du viele Dateien auf einmal um, ohne Schleifen schreiben zu müssen. Die wichtigsten Punkte:
- Nutze
-nfür einen Trockenlauf vor der eigentlichen Umbenennung. - Der Ersetzungsoperator
s/ALT/NEU/ist das Standardwerkzeug. - Der Transliterationsoperator
y/ABC/XYZ/ersetzt einzelne Zeichen. - Perl-reguläre Ausdrücke ermöglichen komplexe Muster.