So verwenden Sie den Umbenennungsbefehl unter Linux

Machen Sie sich mit dem Dateiumbenennungs-Kraftpaket der Linux-Welt vertraut und gönnen Sie mv – und sich selbst – eine Pause. Umbenennen ist flexibel, schnell und manchmal sogar einfacher. Hier ist ein Tutorial zu diesem Kraftpaket eines Befehls.

Was ist falsch an mv?

An mv ist nichts auszusetzen. Der Befehl tut ein feiner job, und es ist auf allen Linux-Distributionen, in macOS und in anderen Unix-ähnlichen Betriebssystemen zu finden. Es ist also immer verfügbar. Aber manchmal braucht man nur einen Bulldozer, keine Schaufel.

Der mv-Befehl hat einen Zweck im Leben, und zwar das Verschieben von Dateien. Es ist ein erfreulicher Nebeneffekt, dass damit eine vorhandene Datei in eine neue Datei mit einem neuen Namen verschoben werden kann. Der Nettoeffekt besteht darin, die Datei umzubenennen, damit wir das bekommen, was wir wollen. Aber mv ist kein spezielles Tool zum Umbenennen von Dateien.

Umbenennen einer einzelnen Datei mit mv

Um mv zum Umbenennen einer Datei zu verwenden, geben Sie mv ein, ein Leerzeichen, den Namen der Datei, ein Leerzeichen und den neuen Namen, den die Datei haben soll. Drücken Sie dann die Eingabetaste.

Sie können mit ls überprüfen, ob die Datei umbenannt wurde.

mv oldfile.txt newfile.txt
ls *.txt

Mehrere Dateien mit mv . umbenennen

Schwieriger wird es, wenn Sie mehrere Dateien umbenennen möchten. mv ist nicht in der Lage, mehrere Dateien umzubenennen. Sie müssen auf einige raffinierte Bash-Tricks zurückgreifen. Das ist in Ordnung, wenn Sie einige mittelschwere Befehlszeilen-Fus kennen, aber die Komplexität des Umbenennens mehrerer Dateien mit mv steht in starkem Kontrast zur einfachen Verwendung von mv zum Umbenennen einer einzelnen Datei.

Die Dinge eskalieren schnell.

Nehmen wir an, wir haben ein Verzeichnis mit einer Vielzahl von Dateien unterschiedlichen Typs. Einige dieser Dateien haben die Erweiterung „.prog“. Wir möchten sie in der Befehlszeile umbenennen, sodass sie die Erweiterung „.prg“ haben.

Wie bringen wir mv dazu, das für uns zu tun? Werfen wir einen Blick auf die Dateien.

ls *.prog -l

Hier ist eine Möglichkeit, dies zu tun, ohne eine tatsächliche Bash-Skriptdatei zu schreiben.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

für f in *.prog;  mach mv --

Hat es funktioniert? Lassen Sie uns die Dateien überprüfen und sehen.

ls *.pr*

Also ja, es hat funktioniert. Sie sind jetzt alle „.prg“-Dateien, und das Verzeichnis enthält keine „.prog“-Dateien.

Was ist gerade passiert?

Was hat dieser lange Befehl eigentlich bewirkt? Lass es uns aufschlüsseln.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

Der erste Teil startet eine Schleife, die nacheinander jede „.prog“-Datei im Verzeichnis verarbeitet.

Der nächste Teil sagt, was die Verarbeitung tun wird. Es verwendet mv, um jede Datei in eine neue Datei zu verschieben. Die neue Datei wird mit dem Namen der Originaldatei ohne den Teil „.prog“ benannt. Stattdessen wird eine neue Erweiterung von „.prg“ verwendet.

  So hören Sie Pandora Radio unter Linux

Es muss einen einfacheren Weg geben

Ganz sicher. Es ist der Umbenennungsbefehl.

rename ist nicht Teil einer Standard-Linux-Distribution, daher müssen Sie es installieren. Es hat auch einen anderen Namen in verschiedenen Linux-Familien, aber sie funktionieren alle auf die gleiche Weise. Sie müssen nur den entsprechenden Befehlsnamen entsprechend der von Ihnen verwendeten Linux-Variante ersetzen.

in von Ubuntu und Debian abgeleiteten Distributionen installieren Sie rename wie folgt:

sudo apt-get install rename

In von Fedora und RedHat abgeleiteten Distributionen installieren Sie prename wie folgt. Beachten Sie das anfängliche „p“, das für Perl steht.

sudo dnf install prename

Um es in Manjaro Linux zu installieren, verwenden Sie den folgenden Befehl. Beachten Sie, dass der Umbenennungsbefehl perl-rename heißt.

sudo pacman -Syu perl-rename

Lass uns das nochmal machen

Und dieses Mal verwenden wir Umbenennen. Wir werden die Uhr zurückdrehen, sodass wir eine Reihe von „.prog“-Dateien haben.

ls *.prog

Lassen Sie uns nun den folgenden Befehl verwenden, um sie umzubenennen. Wir prüfen dann mit ls, ob es funktioniert hat. Denken Sie daran, rename durch den entsprechenden Befehlsnamen für Ihr Linux zu ersetzen, wenn Sie kein Ubuntu oder ein von Debian abgeleitetes Linux verwenden.

rename 's/.prog/.prg/' *.prog
ls *.pr*

Das hat funktioniert, sie sind jetzt alle „.prg“-Dateien und es sind keine „.prog“-Dateien mehr im Verzeichnis.

Was ist dieses Mal passiert?

Lassen Sie uns dieses bisschen Magie in drei Teilen erklären.

Der erste Teil ist der Befehlsname, rename (oder prename oder perl-rename , für die anderen Distributionen).

Der letzte Teil ist *.prog, der rename anweist, mit allen „.prog“-Dateien zu arbeiten.

Der mittlere Teil definiert die Arbeit, die wir an jedem Dateinamen ausführen möchten. Das s bedeutet Ersatz. Der erste Begriff (.prog) ist das, wonach rename in jedem Dateinamen sucht, und der zweite Begriff (.prg) wird durch ihn ersetzt.

Der mittlere Teil des Befehls oder zentralen Ausdrucks ist ein Perl ‚regulären Ausdruck‚ und das verleiht dem Umbenennungsbefehl seine Flexibilität.

Andere Teile eines Dateinamens ändern

Wir haben die Dateinamenerweiterungen bisher geändert, ändern wir andere Teile der Dateinamen.

In dem Verzeichnis befinden sich viele C-Quellcodedateien. Allen Dateinamen ist „slang_“ vorangestellt. Wir können dies mit ls überprüfen.

ls sl*.c

Wir werden alle Vorkommen von „slang_“ durch „sl_“ ersetzen. Das Format des Befehls ist uns bereits bekannt. Wir ändern nur den Suchbegriff, den Ersatzbegriff und den Dateityp.

rename 's/slang_/sl_' *.c

Dieses Mal suchen wir nach „.c“-Dateien und suchen nach „slang_“. Immer wenn „slang_“ in einem Dateinamen gefunden wird, wird es durch „sl_“ ersetzt.

Wir können das Ergebnis dieses Befehls überprüfen, indem wir den ls-Befehl von oben mit den gleichen Parametern wiederholen:

ls sl*.c

Löschen eines Teils eines Dateinamens

Wir können einen Teil eines Dateinamens entfernen, indem wir den Suchbegriff durch nichts ersetzen.

ls *.c
rename 's/sl_//' *.c
ls *.c

Wir können am ls-Befehl sehen, dass unseren „.c“-Dateien alle „sl_“ vorangestellt sind. Lass uns das ganz loswerden.

  Wie man Dead Space unter Linux spielt

Der Umbenennungsbefehl folgt dem gleichen Format wie zuvor. Wir suchen nach „.c“-Dateien. Der Suchbegriff ist „sl_“, aber es gibt keinen Ersatzbegriff. Zwei Backslashes ohne etwas dazwischen bedeuten nichts, eine leere Zeichenfolge.

rename verarbeitet jede „.c“-Datei nacheinander. Es wird nach „sl_“ im Dateinamen gesucht. Wenn es gefunden wird, wird es durch nichts ersetzt. Mit anderen Worten, der Suchbegriff wird gelöscht.

Die zweite Verwendung des ls-Befehls bestätigt, dass das Präfix „sl_“ aus jeder „.c“-Datei entfernt wurde.

Beschränken Sie Änderungen auf bestimmte Teile von Dateinamen

Lassen Sie uns ls verwenden, um Dateien zu betrachten, deren Dateiname die Zeichenfolge „param“ enthält. Dann verwenden wir rename, um diese Zeichenfolge durch die Zeichenfolge „parameter“ zu ersetzen. Wir verwenden ls noch einmal, um zu sehen, wie sich der Befehl rename auf diese Dateien ausgewirkt hat.

ls *param*
rename 's/param/parameter' *.c
ls *param*

Es werden vier Dateien gefunden, deren Dateiname „param“ enthält. param.c, param_one.c und param_two.c haben alle „param“ am Anfang ihres Namens. Third_param.c hat „param“ am Ende seines Namens, kurz vor der Erweiterung.

Der Befehl rename sucht überall im Dateinamen nach „param“ und ersetzt es in allen Fällen durch „parameter“.

Die zweite Verwendung des ls-Befehls zeigt uns, dass genau das passiert ist. Unabhängig davon, ob „param“ am Anfang oder am Ende des Dateinamens stand, wurde es durch „parameter“ ersetzt.

Wir können die Metazeichen von Perl verwenden, um das Verhalten des mittleren Ausdrucks zu verfeinern. Metazeichen sind Symbole, die Positionen oder Zeichenfolgen darstellen. ^ bedeutet beispielsweise „Anfang einer Zeichenfolge“, $ bedeutet „Ende einer Zeichenfolge“ und . bedeutet jedes einzelne Zeichen (außer einem Newline-Zeichen).

Wir werden das Metazeichen für den Anfang des Strings ( ^ ) verwenden, um unsere Suche auf den Anfang der Dateinamen zu beschränken.

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

Die Dateien, die wir zuvor umbenannt haben, werden aufgelistet, und wir können sehen, dass die Zeichenfolge „parameter“ am Anfang von drei Dateinamen und am Ende eines der Dateinamen steht.

Unser Umbenennungsbefehl verwendet das Metazeichen für den Zeilenanfang (^) vor dem Suchbegriff „parameter“. Dadurch wird rename angewiesen, den Suchbegriff nur dann als gefunden zu betrachten, wenn er am Anfang des Dateinamens steht. Die Suchzeichenfolge „parameter“ wird ignoriert, wenn sie an anderer Stelle im Dateinamen enthalten ist.

Wenn wir mit ls überprüfen, können wir sehen, dass der Dateiname mit „parameter“ am Ende des Dateinamens nicht geändert wurde, aber bei den drei Dateinamen mit „parameter“ am Anfang des Namens wurde der Suchstring durch den Ersatz ersetzt Begriff „Wert“.

  So richten Sie einen DLNA-Server unter Linux ein

Die Macht der Umbenennung liegt in der Macht von Perl. Alle der Macht von Perl steht zu Ihrer Verfügung.

Mit Gruppierungen suchen

rename hat noch mehr Tricks im Ärmel. Betrachten wir den Fall, in dem Sie möglicherweise Dateien mit ähnlichen Zeichenfolgen in ihren Namen haben. Es sind nicht genau dieselben Zeichenfolgen, daher funktioniert eine einfache Suche und Ersetzung hier nicht.

In diesem Beispiel verwenden wir ls, um zu überprüfen, welche Dateien wir haben, die mit „str“ beginnen. Es gibt zwei davon, string.c und strangle.c. Wir können beide Strings gleichzeitig umbenennen, indem wir eine Technik namens Gruppierung verwenden.

Der zentrale Ausdruck dieses Umbenennungsbefehls sucht nach Zeichenfolgen innerhalb von Dateinamen, die die Zeichenfolge „stri“ oder „stra“ haben, wobei diesen Folgen unmittelbar „ng“ folgt. Mit anderen Worten, unser Suchbegriff sucht nach „string“ und „strang“. Der Ersatzbegriff ist „Bang“.

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

Wenn Sie ls ein zweites Mal verwenden, wird bestätigt, dass aus string.c bang.c und strangle.c jetzt bangle.c wurde.

Verwenden von Übersetzungen mit Umbenennung

Der Befehl umbenennen kann Aktionen für Dateinamen ausführen, die als Übersetzungen bezeichnet werden. Ein einfaches Beispiel für eine Übersetzung wäre, eine Reihe von Dateinamen in Großbuchstaben zu erzwingen.

Beachten Sie im folgenden Umbenennungsbefehl, dass wir kein s/ verwenden, um den zentralen Ausdruck zu starten, sondern y/. Dies teilt rename mit, dass wir keine Ersetzung durchführen; Wir führen eine Übersetzung durch.

Der Begriff az ist ein Perl-Ausdruck, der alle Kleinbuchstaben in der Reihenfolge von a bis z bedeutet. Ebenso repräsentiert der Begriff AZ alle Großbuchstaben in der Reihenfolge von A bis Z.

Der zentrale Ausdruck in diesem Befehl könnte wie folgt umschrieben werden: „Wenn einer der Kleinbuchstaben von a bis z im Dateinamen gefunden wird, ersetzen Sie sie durch die entsprechenden Zeichen aus der Folge der Großbuchstaben von A bis Z.“

Um die Dateinamen aller „.prg“-Dateien in Großbuchstaben zu erzwingen, verwenden Sie diesen Befehl:

‚y/az/AZ/‘ umbenennen *.prg

ls *.PRG

Der Befehl ls zeigt uns, dass alle „.prg“-Dateinamen jetzt in Großbuchstaben sind. Genauer gesagt handelt es sich nicht mehr um „.prg“-Dateien. Es sind „.PRG“-Dateien. Linux unterscheidet zwischen Groß- und Kleinschreibung.

Wir können diesen letzten Befehl umkehren, indem wir die Position der az- und AZ-Terme im zentralen Ausdruck umkehren.

‚y/AZ/az/‘ umbenennen *.PRG

ls *.prg

Du (Wo|Do) lernst Perl nicht in fünf Minuten

Sich mit Perl auseinanderzusetzen ist gut investierte Zeit. Aber um die zeitsparenden Fähigkeiten des rename-Befehls zu nutzen, müssen Sie nicht viel Perl-Kenntnisse haben, um große Vorteile in Bezug auf Leistung, Einfachheit und Zeit zu erzielen.