[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] '''rename''' ist ein Programm für die Kommandozeile, das es ermöglicht, Dateien eines Ordners mithilfe der regulären Ausdrücke von [:Perl:] umzubenennen. 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. Unter [:Sonstige_Software#Dateimanagement:Dateimanagement] finden sich Programme zum Umbenennen mit grafischer Oberfläche. = Installation = rename ist bei Ubuntu ein [:Symlink:] auf '''/usr/bin/prename''', das wiederum Teil des Pakets '''perl''' ist und in der Standardinstallation von Ubuntu enthalten ist. Spätestens ab Ubuntu 18.04 ist '''/usr/bin/prename''' im Paket '''rename''' enthalten. Will man das Programm [man:rename.ul:rename] aus dem Paket '''util-linux''' verwenden, lautet der Befehl: {{{#!vorlage Befehl rename.ul }}} = Benutzung = Der rename-Befehl bezieht sich immer auf das aktuelle Verzeichnis. Er sieht dabei grundsätzlich wie folgt aus: {{{#!vorlage Befehl 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. Beispiel: {{{#!vorlage Befehl 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. Beispiel: {{{#!vorlage Befehl rename -v 's/^Lenni Kravitz/Lenny Kravitz/' *.mp3 }}} == Syntax der regulären Ausdrücke in Perl == ||<-2 tablestyle="width: 95%;" rowclass="titel"> Syntax || ||<-2 rowclass="kopf"> Selektoren || ||` \w` || Jeden Buchstaben, jede Zahl und den Unterstrich (_) || || `\d `|| Jede Zahl || || `\s` || Jedes Leerzeichen || || ` . ` || ein beliebiges Zeichen || || `[abc]` || Jedes in der eckigen Klammer eingeschlossene Zeichen || || `[^abc] `|| Alle Zeichen, die nicht in der eckigen Klammer sind || || ` ^` || Anfang des Dateinamens || || ` $` || Ende des Dateinamens || || `\ ` || maskiert das folgende Zeichen || ||<-2 rowclass="kopf"> 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 || ||<-2 rowclass="kopf"> Modifier || || `g` || alle Vorkommen des Suchstrings ersetzen (''global'') || || `i` || Groß-/Kleinschreibung nicht beachten (''case-insensitive'') || ||<-2 rowclass="kopf"> 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 || # Kommentar: besserer Abschnittstitel als „Sonstiges“? === Beispiele === * Der folgende Befehl ersetzt in allen Dateien „Max Mustermann“ durch „Erika Mustermann“: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl rename 's/(\d{4})-(\d{2})-(\d{2})/$3.$2.$1/g' *.jpg }}} * Datei-Erweiterung ändern (in diesem Fall '''.html''' in '''.xhtml'''): {{{#!vorlage Befehl rename 's/\.html$/.xhtml/' *.html }}} = Links = * [http://www.regular-expressions.info/perl.html Reguläre Ausdrücke in Perl] {en} * [http://thepcspy.com/read/bulk-rename-files-in-ubuntu/ Bulk renaming files in Ubuntu] {en} - Blogbeitrag, 11/2014 * [:Shell/Befehlsübersicht:] {Übersicht} Übersicht über verschiedene Shellbefehle #tag: Shell