ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

rename

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png rename ist ein Programm für die Kommandozeile, das es ermöglicht, Dateien eines Ordners mithilfe der regulären Ausdrücke von Perl umzubenennen. Siehe auch den Abschnitt rename vs. move.

Installation

rename ist ein Link auf /usr/bin/prename, das wiederum Teil des Pakets perl ist, das in der Standardinstallation enthalten ist.

Benutzung

Der rename-Befehl bezieht sich immer auf das aktuelle Verzeichnis. Er sieht dabei grundsätzlich wie folgt aus:

rename OPTIONEN 'REGULÄRER_AUSDRUCK' DATEIEN 

Der reguläre Ausdruck muss dabei in der Perl-Syntax sein. Diese sieht wie folgt aus:

s/SUCHSTRING/ERSETZUNGSSTRING/MODIFIER

Die umzubenennenden Dateien folgen einer Wildcard-Syntax, wo der * für eine beliebige Anzahl von Zeichen steht.

Optionen

Es lassen sich mehrere Optionen pro Kommando eingeben:

  • -n oder --no-act: Die Dateien werden nicht umbenannt und es wird jeweils im Terminal nur angezeigt, wie die Dateien bei einer solchen Umbenennung aussehen würden. Dies kann sinnvoll sein, wenn man sich nicht sicher ist, ob der reguläre Ausdruck funktioniert.

rename -n 's/(.*)(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember) (\d{4})(.+)/$1$4 $2 $3/i' * 
  • -f oder --force: Überschreibt existierende Dateien, falls der neue Dateiname blockiert ist.

  • -v oder --verbose: Schreibt eine Erfolgsnachricht pro umbenannter Datei ins Terminal, sodass man einfach prüfen kann, ob die Umbenennung funktioniert hat.

rename -v 's/^Lenni Kravitz/Lenny Kravitz/' *.mp3 

Syntax der regulären Ausdrücke in Perl

Syntax
Selektoren
\w Jeden Buchstaben, jede Zahl und den Unterstrich (_)
\d Jede Zahl
\s Jedes Leerzeichen
. Alles
[abc] Jedes in der eckigen Klammer eingeschlossene Zeichen
[^abc] Alle Zeichen, die nicht in der eckigen Klammer sind
^ Anfang des Dateinamens
$ Ende des Dateinamens
Quantifier
* 0 bis unendlich
+ 1 bis unendlich
? 0 oder einmal
{m,} mindestens m-mal
{,n} maximal n-mal vorhanden
{m,n} mindestens m-mal und maximal n-mal
Modifier
g alle Vorkommen des Suchstrings ersetzen (global)
i Groß-/Kleinschreibung nicht beachten (case-insensitive)
Sonstiges
() Gruppierung einer Zeichenkette zur späteren Weiterverwendung
| oder-Operator
\1, \2 erste, zweite usw. Gruppierung im Suchstring
$1, $2 erste, zweite usw. Gruppierung im Ersetzungsstring

Beispiele

Der folgende Befehl ersetzt in allen Dateien „Max Mustermann“ durch „Erika Mustermann“:

rename 's/Max Mustermann/Erika Mustermann/g' * 

In allen .jpg-Dateien wird der Datumsformat JJJJ-MM-DD in das Format DD.MM.JJJJ geändert:

rename 's/(\d{4})-(\d{2})-(\d{2})/$3.$2.$1/g' *.jpg 

Datei-Erweiterung ändern (in diesem Fall .html in .xhtml)

rename 's/\.html$/.xhtml/' *.html 

rename vs. mv

rename und der Shell-Befehl mv sind nicht dasselbe und bieten jeweils unterschiedliche Möglichkeiten. Dies lässt sich prinzipiell auch direkt im Namen erkennen: rename ("umbenennen") dient der Umbenennung von Dateien, mv ("verschieben") kann daneben auch Dateien von Verzeichnis nach Verzeichnis verschieben. rename ist im Vergleich zu mv ein einfacher Weg, eine große Anzahl von Dateien eines Ordners umzubenennen. Ansonsten ist die Funktionalität von rename nur über zahllose einzelne mv-Befehle im Terminal oder über ein Bash-Skript zu erreichen. rename hat jedoch auch klare Grenzen. Nicht möglich sind dabei u.a.:

  • Verschieben von Dateien in andere Ordner

  • Metadaten wie Autor, Erstellungsdatum o.Ä. in den Dateinamen einfließen lassen

  • Dateien basierend auf anderen Dateinamen umbenennen

Für solche Zwecke eignen sich spezielle Perl- oder Bash-Skripte.

ubuntuusers.local › Wikirename