So verwenden Sie den Umbenennungsbefehl unter Linux

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

Was ist falsch an mv?

Daran ist nichts auszusetzen mv . 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.

Die 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

Benutzen mv einen Dateityp umbenennen mv, ein Leerzeichen, den Namen der Datei, ein Leerzeichen und den neuen Namen, den die Datei haben soll. Dann drücken Enter.

Sie können verwenden ls um zu ü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 hat keine Möglichkeit, mit dem Umbenennen mehrerer Dateien umzugehen. Sie müssen auf einige raffinierte Bash-Tricks zurückgreifen. Das ist in Ordnung, wenn Sie einige mittelschwere Befehlszeilen-Fun kennen, aber die Komplexität des Umbenennens mehrerer Dateien mit mv steht im krassen Gegensatz zur Benutzerfreundlichkeit mv um eine einzelne Datei umzubenennen.

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 streiten wir mv das für uns 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"

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.

Es muss einen einfacheren Weg geben

Ganz sicher. Es ist der rename Befehl.

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, die Sie installieren rename so was:

sudo apt-get install rename

In Fedora und von RedHat abgeleitete Distributionen, die Sie installieren prename so was. 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 aufgerufen wird perl-rename.

sudo pacman -Syu perl-rename

Lass uns das nochmal machen

Und dieses Mal verwenden wir rename. 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, zu ersetzen rename mit dem entsprechenden Befehlsnamen für Ihr Linux, 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, die erzählt rename um mit allen „.prog“-Dateien zu arbeiten.

Der mittlere Teil definiert die Arbeit, die wir an jedem Dateinamen ausführen möchten. Die s bedeutet Ersatz. Der erste Begriff (.prog) ist, was rename sucht in jedem Dateinamen und dem zweiten Begriff (.prg) wird es ersetzt.


Der mittlere Teil des Befehls oder zentralen Ausdrucks ist ein Perl ‘regulären Ausdruck‘ und das ist es, was die rename seine Flexibilität beherrschen.

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 das ü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.

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 die ls Befehl von oben mit den gleichen Parametern:

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 von der sehen ls Befehl, dass unsere „.c“-Dateien alle mit „sl_“ vorangestellt werden. Lass uns das ganz loswerden.

Die rename Befehl 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 Der Befehl bestätigt, dass das Präfix „sl_“ aus jeder „.c“-Datei entfernt wurde.

Beschränken Sie Änderungen auf bestimmte Teile von Dateinamen

Lass uns verwenden ls um nach Dateien zu suchen, 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 die Wirkung zu sehen rename Befehl auf diese Dateien hatte.

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.

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

Die zweite Verwendung des ls Befehl 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. Zum example, ^ bedeutet “Anfang einer Zeichenfolge”, $ bedeutet „Ende einer Zeichenfolge“ und . bedeutet jedes einzelne Zeichen (außer einem Newline-Zeichen).

Wir verwenden den Anfang des String-Metazeichens ( ^ ), 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.


Unsere rename Befehl verwendet den Zeilenanfang (^) Metazeichen vor dem Suchbegriff „Parameter“. Das sagt rename um 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.

Überprüfung mit ls, sehen wir, 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 die Suchzeichenfolge durch den Ersatzbegriff „value . ersetzt .“

Die kraft von rename 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 example wir gebrauchen 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 dafür rename Der Befehl sucht innerhalb von Dateinamen nach Zeichenfolgen mit der Zeichenfolge „stri“ oder „stra“, wobei diesen Sequenzen 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


Verwenden von ls ein zweites Mal bestätigt, dass string.c zu bang.c wurde und strangle.c jetzt zu bangle.c.

Verwenden von Übersetzungen mit Umbenennung

Die rename -Befehl kann Aktionen für Dateinamen ausführen, die als Übersetzungen bezeichnet werden. Eine einfache example einer Übersetzung würde darin bestehen, eine Reihe von Dateinamen in Großbuchstaben zu erzwingen.

In dem rename Befehl unten beachten Sie, dass wir kein an verwenden s/ um den zentralen Ausdruck zu starten, verwenden wir y/. Das sagt rename wir führen keine Auswechslung durch; Wir führen eine Übersetzung durch.

Die a-z Begriff ist ein Perl-Ausdruck, der alle Kleinbuchstaben in der Reihenfolge von a bis z bedeutet. Ebenso die A-Z Begriff steht für 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 ihn 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


Die ls Befehl 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 des umkehren a-z und A-Z Begriffe im zentralen Ausdruck.

‘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 Funktionen des rename Befehl benötigen Sie nicht viel Perl-Kenntnisse, um große Vorteile in Bezug auf Leistung, Einfachheit und Zeit zu erzielen.

Linux-Befehle
DateienTeer · pv · Katze · tac · chmod · grep · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · Journalctl · Schwanz · stat · ls · fstab · Echo · weniger · chgrp · chown · rev · aussehen · Saiten · Typ · umbenennen · Postleitzahl · entpacken · montieren · ummount · Installieren · fdisk · mkfs · rm · rmdir · rsync · df · gpg · wir · Nano · mkdir · von · ln · Patch · Konvertieren · rclon · Fetzen · srm
Prozessealias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · bei · Charge · kostenlos · welcher · dmesg · chfn · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · Jawohl · töten · Schlaf · sudo · es ist · Zeit · groupadd · Benutzermod · Gruppen · lshw · abschalten · neu starten · Halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzungnetstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · curl · wget · Wer · Wer bin ich · w · iptables · ssh-keygen · ufw

Beste Linux-Laptops für Entwickler und Enthusiasten

Related Posts