Verwendung des Umbenennungsbefehls unter Linux

Machen Sie sich mit dem Kraftpaket zum Umbenennen von Dateien in der Linux-Welt mvvertraut und gönnen Sie sich eine Pause. Renameist flexibel, schnell und manchmal sogar einfacher. Hier ist ein Tutorial zu diesem Kraftpaket eines Befehls.

Was ist los mit mv?

Daran ist nichts auszusetzen mv. Der Befehl macht einen guten Job und 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 mvBefehl hat einen Lebenszweck, nämlich 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. Ist mvaber kein dediziertes Tool zum Umbenennen von Dateien.

Umbenennen einer einzelnen Datei mit mv

Zum mvUmbenennen eines Dateityps mv, eines Leerzeichens, des Dateinamens, eines Leerzeichens und des neuen Namens, den die Datei haben soll. Drücken Sie dann die Eingabetaste.

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

mv oldfile.txt newfile.txt
ls * .txt

Umbenennen mehrerer Dateien mit mv

Schwieriger wird es, wenn Sie mehrere Dateien umbenennen möchten. mvkann nicht mit dem Umbenennen mehrerer Dateien umgehen. Sie müssen auf einige raffinierte Bash-Tricks zurückgreifen. Das ist in Ordnung, wenn Sie ein Befehlszeilen-Fu mittlerer Qualität kennen, aber die Komplexität des Umbenennens mehrerer Dateien mit mvsteht in starkem Kontrast zu der einfachen Verwendung mvzum 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, damit sie die Erweiterung ".prg" haben.

Wie können wir mvdas für uns tun? Werfen wir einen Blick auf die Dateien.

ls * .prog -l

Hier ist eine Möglichkeit, die nicht das Schreiben einer tatsächlichen Bash-Skriptdatei erfordert.

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

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

ls * .pr *

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

Was ist gerade passiert?

Was hat dieser lange Befehl eigentlich getan? Lassen Sie es uns zusammenfassen.

für 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 wird 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.

Es muss einen einfacheren Weg geben

Ganz sicher. Es ist der renameBefehl.

renameist nicht Teil einer Standard-Linux-Distribution, daher müssen Sie sie installieren. Es hat auch einen anderen Namen in verschiedenen Linux-Familien, aber alle funktionieren 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 renamewie folgt :

sudo apt-get install umbenennen

In von Fedora und RedHat abgeleiteten Distributionen installieren Sie prenamewie folgt . Beachten Sie das anfängliche "p", das für Perl steht.

sudo dnf vorname installieren

Verwenden Sie den folgenden Befehl, um es in Manjaro Linux zu installieren. Beachten Sie, dass der Umbenennungsbefehl aufgerufen wird perl-rename.

sudo pacman -Syu perl-umbenennen

Lass uns das noch einmal machen

Und diesmal werden wir verwenden rename. Wir werden die Uhr zurückdrehen, damit wir eine Reihe von ".prog" -Dateien haben.

ls * .prog

Verwenden Sie nun den folgenden Befehl, um sie umzubenennen. Wir werden dann prüfen, lsob es funktioniert hat. Denken Sie daran, renameIhren Linux durch den entsprechenden Befehlsnamen zu ersetzen, wenn Sie Ubuntu oder ein von Debian abgeleitetes Linux nicht verwenden.

Benennen Sie 's / .prog / .prg /' * .prog um
ls * .pr *

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

Was ist in dieser Zeit passiert?

Lassen Sie uns dieses Stück Magie in drei Teilen erklären.

Der erste Teil ist der Befehlsname rename(oder prenameoder perl-renamefür die anderen Distributionen).

Der letzte Teil *.progbesagt rename, dass alle ".prog" -Dateien bearbeitet werden sollen.

Der mittlere Teil definiert die Arbeit, die an jedem Dateinamen ausgeführt werden soll. Das sbedeutet Ersatz. Der erste Begriff ( .prog) ist das, wonach renamein jedem Dateinamen gesucht wird, und der zweite Begriff ( .prg) ist das, durch den er ersetzt wird.

Der mittlere Teil des Befehls oder des zentralen Ausdrucks ist ein regulärer Perl-Ausdruck, der dem renameBefehl seine Flexibilität verleiht .

Ändern anderer Teile eines Dateinamens

Wir haben die Dateinamenerweiterungen bisher geändert. Lassen Sie uns andere Teile der Dateinamen ändern.

Im Verzeichnis befinden sich viele C-Quellcodedateien. Allen Dateinamen wird "slang_" vorangestellt. Wir können dies überprüfen mit ls.

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.

benenne 's / slang_ / sl_' * .c um

Dieses Mal suchen wir nach ".c" -Dateien und 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 lsBefehl von oben mit denselben Parametern wiederholen :

ls sl * .c

Teil eines Dateinamens löschen

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

ls * .c
benenne 's / sl _ //' * .c um
ls * .c

Wir können dem lsBefehl entnehmen, dass unseren ".c" -Dateien alle "sl_" vorangestellt sind. Lassen Sie uns das ganz loswerden.

Der renameBefehl hat das gleiche Format wie zuvor. Wir werden nach ".c" -Dateien suchen. Der Suchbegriff lautet "sl_", es gibt jedoch keinen Substitutionsbegriff. Zwei Backslashes ohne irgendetwas dazwischen bedeuten nichts, eine leere Zeichenfolge.

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

Die zweite Verwendung des lsBefehls bestätigt, dass das Präfix "sl_" aus jeder ".c" -Datei entfernt wurde.

Beschränken Sie Änderungen auf bestimmte Teile von Dateinamen

ls Schauen wir uns Dateien an, deren Dateiname die Zeichenfolge "param" enthält. Dann werden wir renamediese Zeichenfolge durch die Zeichenfolge "Parameter" ersetzen. Wir werden noch lseinmal verwenden, um zu sehen, welche Auswirkungen der renameBefehl auf diese Dateien hatte.

ls * param *
benenne 's / param / parameter' um * .c
ls * param *

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

Der renameBefehl sucht überall im Dateinamen nach "param" und ersetzt ihn in allen Fällen durch "parameter".

Die zweite Verwendung des  lsBefehls 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 Perls Metazeichen verwenden, um das Verhalten des mittleren Ausdrucks zu verfeinern. Metazeichen sind Symbole, die Positionen oder Folgen von Zeichen darstellen. Bedeutet beispielsweise ^"Anfang einer Zeichenfolge", $bedeutet "Ende einer Zeichenfolge" und .bedeutet ein einzelnes Zeichen (außer einem Zeilenumbruchzeichen).

Wir werden den Anfang des Strings metacharacter ( ^) verwenden, um unsere Suche auf den Anfang der Dateinamen zu beschränken.

ls * param * .c
Benennen Sie 's / ^ parameter / value /' * .c um
ls * param * .c
ls Wert * .c

Die Dateien, die wir zuvor umbenannt haben, werden aufgelistet, und wir können sehen, dass sich die Zeichenfolge "Parameter" am Anfang von drei Dateinamen und am Ende eines der Dateinamen befindet.

Unser renameBefehl verwendet das Zeilenanfangs-  (^Metazeichen vor dem Suchbegriff "Parameter". Dies bedeutet, dass renameder Suchbegriff nur dann als gefunden betrachtet wird, wenn er am Anfang des Dateinamens steht. Die Suchzeichenfolge "Parameter" wird ignoriert, wenn sie sich an einer anderen Stelle im Dateinamen befindet.

Wenn Sie mit überprüfen ls, können Sie feststellen, dass der Dateiname, der am Ende des Dateinamens "Parameter" hatte, nicht geändert wurde, aber bei den drei Dateinamen, die am Anfang ihres Namens "Parameter" hatten, wurde die Suchzeichenfolge durch den Ersatzbegriff ersetzt "Wert."

Die Kraft von renameliegt in der Kraft von Perl. Die gesamte Leistung von Perl steht Ihnen zur Verfügung.

Suchen mit Gruppierungen

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

In diesem Beispiel ls überprüfen wir , welche Dateien mit "str" ​​beginnen. Es gibt zwei davon, string.c und strangle.c. Wir können beide Zeichenfolgen gleichzeitig mit einer Technik namens Gruppierung umbenennen.

Der zentrale Ausdruck dieses renameBefehls sucht nach Zeichenfolgen in Dateinamen mit der Zeichenfolge "stri" oder "stra", wobei auf diese Sequenzen unmittelbar "ng" folgt. Mit anderen Worten, unser Suchbegriff wird nach "string" und "strang" suchen. Der Substitutionsbegriff lautet „Bang“.

ls str * .c
benenne 's / (stri | stra) ng / bang /' * .c um
ls Verbot * .c

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

Verwenden von Übersetzungen Mit Umbenennen

Der renameBefehl 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 renameBefehl, dass wir kein verwenden s/ , um den zentralen Ausdruck zu starten y/. Dies zeigt, dass  renamewir keine Substitution durchführen. Wir führen eine Übersetzung durch.

Der a-z Begriff ist ein Perl-Ausdruck, der alle Kleinbuchstaben in der Sequenz von a bis z bedeutet. In ähnlicher Weise A-Z repräsentiert der Begriff alle Großbuchstaben in der Reihenfolge von A bis Z.

Der zentrale Ausdruck in diesem Befehl könnte wie folgt umschrieben werden: "Wenn im Dateinamen Kleinbuchstaben von a bis z enthalten sind, ersetzen Sie diese durch die entsprechenden Zeichen aus der Folge von Großbuchstaben von A bis Z."

Verwenden Sie diesen Befehl, um die Dateinamen aller ".prg" -Dateien in Großbuchstaben zu setzen:

Benennen Sie 'y / az / AZ /' * .prg um

ls * .PRG

Der lsBefehl zeigt uns, dass alle ".prg" -Dateinamen jetzt in Großbuchstaben geschrieben sind. Um genau zu sein, 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 a-zund A-Z -Begriffe im zentralen Ausdruck umkehren .

Benennen Sie 'y / AZ / az /' * .PRG um

ls * .prg

Sie (Wo | Do) lernen Perl nicht in fünf Minuten

Perl in den Griff zu bekommen ist eine gute Zeit. Um die zeitsparenden Funktionen des renameBefehls nutzen zu können, benötigen Sie jedoch nicht viel Perl-Wissen, um große Vorteile in Bezug auf Leistung, Einfachheit und Zeit zu erzielen.