Wie kann ich mehrere Dateien einfach über die Befehlszeile umbenennen?


103

Eine der Möglichkeiten, wie ich Dateien in Windows schnell umbenenne, ist

F2 > Rename > Tab (to next file) > Rename ...

Aber in Ubuntu / Nautilus kann ich nicht zur nächsten Datei wechseln. Unter Linux muss es jedoch eine Befehlszeilenalternative geben.

Manchmal möchte ich jedoch mehr Kontrolle darüber, wie bestimmte Dateien umbenannt werden sollen. In diesem Fall ist es vielleicht besser, mit der nächsten Datei fortzufahren


1
Könnten Sie "mehr Kontrolle" definieren? Nicht sicher, was Sie genau fragen ..
Dang Khoa

Ich denke, diese Frage ist nicht beantwortet. Was du fragst (F2 und dann im F2-Modus zur nächsten Datei springen) ist momentan nicht verfügbar, denke ich in Nautilus.
don.joey

Antworten:


188

Ich benutze die renameganze Zeit. Es ist ziemlich einfach, aber Sie kennen hoffentlich den regulären Ausdruck:

rename "s/SEARCH/REPLACE/g"  *

Dadurch wird die Zeichenfolge ersetzen SEARCHmit REPLACEin jeder Datei (das heißt, *). Das /gbedeutet global, wenn Sie also ein hätten SEARCH_SEARCH.jpg, würde es umbenannt REPLACE_REPLACE.jpg. Wenn Sie es nicht /ggetan hätten , wäre es nur einmal ausgetauscht worden und wurde daher jetzt benannt REPLACE_SEARCH.jpg. Wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen möchten, fügen Sie hinzu /i(das wäre /gioder /igam Ende).

Mit regulären Ausdrücken können Sie viel mehr tun.

Beachten Sie, dass dies renameder prename(auch als Perl bezeichnete rename) Befehl ist, der vollständige reguläre Perl-Ausdrücke unterstützt. Es gibt einen anderen, renameder Muster verwendet und nicht so mächtig ist. prenameFrüher wurde es standardmäßig unter Ubuntu (zusammen mit Perl) installiert, aber jetzt müssen Sie möglicherweise Folgendes tun:

sudo apt install rename

Hier einige Beispiele:

Präfix

Hinzufügen :

rename 's/^/MyPrefix_/' * 
  • document.pdf umbenannt in MyPrefix_document.pdf

Entfernen :

Sie können auch unerwünschte Zeichenfolgen entfernen. Angenommen, Sie hatten 20 MP3-Dateien mit dem Namen like CD RIP 01 Song.mp3und wollten den Teil "CD RIP" entfernen, und Sie wollten diesen mit einem Befehl von allen entfernen.

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp3 zu 01 Song.mp3

Beachten Sie den zusätzlichen Speicherplatz in '^CD RIP '. Ohne den Speicherplatz hätten alle Dateien ein Leerzeichen als erstes Zeichen der Datei. Beachten Sie auch, dass dies ohne das ^Zeichen funktioniert , aber CD RIP in jedem Teil des Dateinamens übereinstimmt . Das ^garantiert, dass es die Zeichen nur entfernt, wenn sie der Anfang der Datei sind.

Suffix

Hinzufügen :

rename 's/$/_MySuffix/' *
  • document.pdf umbenannt in document.pdf_MySuffix

Änderung :

rename 's/\.pdf$/.doc/' *

wird sich ändern Something.pdfin Something.doc. (Der Grund für die Backslash ist, .ist ein Platzhalter in regexp so .pdfStreichhölzer , qPDFwährend \.pdfnur die exakte Zeichenfolge entspricht .pdf. Ebenfalls sehr wichtig zu beachten, wenn Sie mit BASH nicht vertraut sind, müssen Sie Schrägstriche in einfache Anführungszeichen setzen! Sie können keine Anführungszeichen weglassen oder verwenden Sie doppelte Anführungszeichen, oder bash versucht, sie zu übersetzen. to bash \. and "\." equals .. (Es werden jedoch doppelte Anführungszeichen und Backslashes verwendet, z. B. "\ n" für eine neue Zeile, da dies "\."jedoch keine gültige Back-Escape-Sequenz ist.) übersetzt in .)

Tatsächlich können Sie die Teile des Strings sogar in Anführungszeichen anstatt in das Ganze setzen: 's/Search/Replace/g'ist dasselbe wie s/'Search'/'Replace'/gund s/Search/Replace/gfür BASH. Sie müssen nur auf Sonderzeichen (und Leerzeichen) achten.


Ich schlage vor, die -nOption zu verwenden, wenn Sie nicht sicher sind, dass Sie die richtigen regulären Ausdrücke haben. Es zeigt, was umbenannt werden würde, und wird dann beendet, ohne es zu tun. Zum Beispiel:

rename -n s/'One'/'Two'/g *

Dies listet alle Änderungen auf, die vorgenommen worden wären, wenn Sie die -nFlagge nicht dort platziert hätten. Wenn es gut aussieht, drücken Sie Up, um zurückzukehren, und löschen Sie dann -nund drücken Sie Enter(oder ersetzen Sie es durch, -vum alle vorgenommenen Änderungen auszugeben).

Hinweis : Ubuntu-Versionen über 17.04 renamewerden standardmäßig nicht mitgeliefert, sind jedoch weiterhin in den Repositorys verfügbar. Verwenden Sie sudo apt install renamees zu installieren


Wie werde ich ein "dynamisches" Suffix haben. Wie 001 - 010 usw. Möglich?
Jiew Meng

Hmm .. Ich habe versucht, etwas aufzuschreiben, aber es hat nicht funktioniert. Meistens, weil, wenn ich 1 zu 001 addiere, es zu 2 addiert, nicht zu 002. Andernfalls könnte ich varaibles verwenden, um die Zahlenposition zu halten, und es dann anhängen. Außerdem erinnerte ich mich, bevor ich über den renameBefehl Bescheid wusste, dass ich Folgendes getan habe, um Folgendes anzufügen:for f in *; do mv -v "$f" "prependThis$f"; done
Matt,

2
@jiewmeng Ja. Verwenden Sie (?:\.[0-9]{3})$in Ihrem Muster alle 3-stelligen Dateierweiterungen in einer passiven Gruppe. Beispiel: rename s/^my_favorite_movie.avi(?:\.[0-9]{3})$/random_movie.avi/ *. Schauen Sie sich diesen Regex-Spickzettel an .
Sergio91pt

@ sergio91pt Es ist ein schönes Regex-Spickzettel. Aber worum geht es? Muss Perl sein - aber eine solche Notiz kann man dort nicht finden.
Adobe

@Adobe Es ist eine allgemeine für "Perl-basierte Regex". Beachten Sie den Hinweis zum + -Zeichen und die Spalte zu POSIX-Zeichenklassen.
Sergio91pt

21

Versuchen Sie Pyrenamer .

Es ist nicht in Nautilus integriert, erledigt aber die Arbeit. Hier ist eine Bewertung.

Thunar (Teil von XFCE) hat auch einen Renamer, den Sie separat ausführen können.

Thunar Bulk Renamer


2
Vielen Dank, dass Sie die Thunar-Funktionalität erwähnt haben. Wenn Sie Thunar haben - wählen Sie Dateien im Ordner und drücken Sie F2.
Max

9

Auf dem Launchpad scheint sich ein Projekt namens Nautilus-Renamer zu befinden . Sie können es installieren, indem make installSie es ausführen , sobald Sie das Skript heruntergeladen und entpackt haben. Es scheint einige Funktionen zu haben, oder wenn Sie wissen, dass es sich um eine Programmierung handelt, können Sie es einfach an Ihre Bedürfnisse anpassen, da es sich nur um ein Python-Skript handelt.

Bildbeschreibung hier eingeben


8

In der Befehlszeile lautet der Befehl zum Umbenennen einer einzelnen Datei einfach

mv file1.txt file2.txt

Wenn Sie es im Batch tun möchten, möchten Sie es wahrscheinlich über ein Skript tun. Wenn Sie weitere Details angeben, kann ich oder jemand anderes wahrscheinlich eine für Sie zusammenstellen. Das heißt, ein Skript zum Anhängen von Inhalten an eine Datei könnte folgendermaßen aussehen:

#!/bin/bash
for file in *
do
    # separate the file name from its extension
    if [[ $file == *.* ]]; then
      ext="${file##*.}"
      fname="${file%.*}"
      mv "$file" "${fname}_APPENDSTUFFHERE.$ext"
    else
      mv "$file" "${file}_APPENDSTUFFHERE"
    fi
done

Abhängig davon, wie Sie die Dinge umbenennen möchten, wird dies wahrscheinlich optimiert, zum Beispiel, wenn Sie bestimmte Umbenennungsregeln befolgen müssen. (Persönlich würde ich das über ein Perl-Skript machen, da mein Bash-Foo nicht so toll ist, aber das bin nur ich.)

Beachten Sie, dass ich die Trennung von Dateiname und Erweiterung von einer zuvor gestellten Frage erhalten habe .


7

Falls Sie dies ohne Befehlszeile tun möchten, verwenden Sie ähnlich wie in Windows die rechte Pfeiltaste anstelle der Tabulatortaste . Dadurch wird die nächste Datei ausgewählt, wie dies auch in Windows der Fall ist.


Es ist nicht dasselbe: Sie müssten noch die EINGABETASTE drücken, um die Umbenennung abzuschließen, die Pfeiltaste drücken, um zur nächsten Datei zu wechseln, und F2, um sie umzubenennen. TAB erledigt dies in einem Schritt, sobald Sie eine Datei umbenennen.
MestreLion

@MestreLion Aber es ist dem in der Frage beschriebenen Algorithmus sehr ähnlich und erfordert weder zusätzliche Software noch Befehlszeilenoperationen. Art benutzerfreundlich.
Rafał Cieślak

Es stimmt, Sie waren die einzige Antwort , die zumindest versucht , den gleichen Ansatz wie die ursprüngliche Frage. Und die traurige Wahrheit ist, dass Nautilus keine solche Funktionalität hat. Sie können F2 umbenennen, aber das ist es. Kein TAB, um automatisch zur nächsten Datei im Umbenennungsmodus zu springen.
MestreLion

7

Nicht wirklich die gleiche Frage wie Wie können viele Dateien gleichzeitig umbenannt werden? Aber ich werde das gleiche Programm vorschlagen, das ich in dieser Antwort vorgeschlagen habe: qmv .

qmv ist ein praktisches Tool aus dem Renameutils-Paket. Sie können Ihren bevorzugten Texteditor verwenden, um Dateien umzubenennen. In Kombination mit der Leistungsfähigkeit von vim verfügen Sie über ein hervorragendes Dienstprogramm zum Umbenennen.

Normalerweise rufe ich es wie qmv -f doin dem Verzeichnis auf, in dem ich eine Reihe von Dateien umbenennen möchte. Oder wenn ich rekursiv umbenennen möchte qmv -R -f do.

Immer wenn ich mehrere Dateien umbenennen muss, greife ich auf qmv (und vim) zurück.

http://www.nongnu.org/renameutils/


Ich habe es gerade versucht, basierend auf Ihrem Vorschlag. Dies ist wirklich das tollste Tool, wenn Sie vim verwenden!
ste_kwr

3

Wenn die einzige geeignete Option darin besteht, die Dateien manuell umzubenennen, können Sie dazu vidir(im moreutilsPaket) Folgendes verwenden:

sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install moreutils
DESCRIPTION
       vidir allows editing of the contents of a directory in a text editor.
       If no directory is specified, the current directory is edited.

       When editing a directory, each item in the directory will appear on
       its own numbered line. These numbers are how vidir keeps track of what
       items are changed. Delete lines to remove files from the directory, or
       edit filenames to rename files. You can also switch pairs of numbers
       to swap filenames.

       Note that if "-" is specified as the directory to edit, it reads a
       list of filenames from stdin and displays those for editing.
       Alternatively, a list of files can be specified on the command line.

Beispiele


Dateien selektiv umbenennen

Aktueller Inhalt des Arbeitsverzeichnisses:

.
├── bar
├── baz
└── foo

Führen Sie aus vidir, und benennen Sie die Dateinamen in den Zeilen um, die die Dateinamen enthalten, die Sie umbenennen möchten. drücke CTRL+ Ound CTRL+ X:

screenshot3

.
├── bar.bak
├── baz.old
└── foo.new

Dateinamen selektiv wechseln

Aktueller Inhalt des Arbeitsverzeichnisses:

.
├── bar
├── baz
└── foo

Aktueller Inhalt der Arbeitsverzeichnisdateien:

$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is bar

- baz:

This is baz

- foo:

This is foo

$ 

Führen Sie aus vidir, wechseln Sie die Nummern in den Zeilen, die die Dateinamen enthalten, die Sie wechseln möchten. drücke CTRL+ Ound CTRL+ X:

screenshot4

.
├── bar
├── baz
└── foo
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is foo

- baz:

This is bar

- foo:

This is baz

$ 

Dateien selektiv entfernen

Aktueller Inhalt des Arbeitsverzeichnisses:

.
├── bar
├── baz
└── foo

Führen Sie vidir, entfernen Sie die Linien , die die Dateien enthält , die Sie löschen möchten; drücke CTRL+ Ound CTRL+ X:

screenshot2

.
└── baz

2

Ich benutze Krename. Es ist eine GUI-App. Es könnte MP3-Tags und so weiter lesen.

Es gibt es als separate App sowie als Teil von Krusader.

Es gibt auch ein renameSkript, das Teil der Standard-Perl-Installation ist (wahrscheinlich haben Sie es installiert). Probieren Sie es aus mit man rename.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.