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

OptionBeschreibung
-nTrockenlauf: zeigt geplante Umbenennungen, führt sie aber nicht aus
-vZeigt 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 – Matcht jpg oder jpeg (das e ist 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 -n fü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.