Wie kann ich alle Dateipräfixe in einem Befehl ändern?


7

Ich muss die Postfixes aller Dateien (alle .JPEG) in .jpeg (Groß- und Kleinschreibung) ändern.
Gibt es eine schnelle Möglichkeit, dies zu tun?

Antworten:


14

Verwenden Sie das renamestandardmäßig installierte Perl-Programm :

rename 's/\.JPEG$/.jpeg/' *.JPEG

Das erste Argument ist ein regulärer Perl-Ausdruck, der mit Dateinamen übereinstimmt, die mit enden .JPEGund durch diese ersetzt werden .jpeg.

Das zweite Argument wählt die Dateien aus, die abgeglichen werden sollen, in Ihrem Fall jede Datei im aktuellen Verzeichnis, die auf endet .JPEG. Sie können natürlich einen anderen Ort angeben:

rename 's/\.JPEG$/.jpeg/' ~/Pictures/*.JPEG

Andere Antworten, die ich gesehen habe:

  • rename s/.JPEG$/.jpeg/ *- Dadurch werden auch Dateien wie folgt umbenannt StupidJPEG, Stupi.jpegda der Punkt mit einem beliebigen Zeichen übereinstimmt. .JPEG$ist ein regulärer Ausdruck
  • rename 's/\.JPEG$/\.jpeg/' *- funktioniert, ist aber weniger effizient, da alle Dateien im aktuellen Verzeichnis an übergeben werden rename.
  • rename -n 's/.JPEG$/.jpeg/' *.JPEG- Die -nOption zeigt die umbenannten Dateien an, ohne sie tatsächlich umzubenennen ("Trockenlauf"). Da *.JPEGÜbereinstimmungsdateien .JPEGnur mit nachfixiert werden , gibt es hier kein Problem mit Punktübereinstimmungen .

1
Der zweite Punkt muss nicht maskiert werden, da er nicht Teil des übereinstimmenden Ausdrucks ist. Entspricht in einem regulären Ausdruck einem .beliebigen Zeichen (mit wenigen Ausnahmen), daher muss der Punkt im regulären Ausdruck maskiert werden \.JPEG$.
Lekensteyn

Dies funktioniert auch:for i in *.JPEG; do mv $i $(basename $i .JPEG).jpeg; done
crazy2be

@ crazy2be: Mach eine Antwort darauf. Es ist nützlich, falls renamees nicht verfügbar ist. Auch $(basename $i .JPEG)kann ersetzt werden mit ${i%%.JPEG}(bash - Erweiterung)
Lekensteyn

3

Obwohl dies möglicherweise nicht die beste Lösung für diesen speziellen Anwendungsfall ist,

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

funktioniert auch. Wir können mit bash etwas trickreich machen, um die Effizienz leicht zu steigern (das Aufrufen eines zusätzlichen Unterprozesses in der inneren Schleife wird vermieden), was zu Folgendem führt:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

Diese Lösung ist am nützlichsten, wenn Sie zusätzlich zum Umbenennen der Dateien noch etwas anderes tun möchten , z. B. protokollieren, welche Namen geändert wurden, oder einfach nur einen Probelauf durchführen , um sicherzustellen, dass sie das tun, was Sie möchten.


Ich empfehle, die Variablen in doppelte Anführungszeichen zu setzen. Es ist nicht ungewöhnlich, dass Bilder Leerzeichen in ihren Namen haben.
Lekensteyn

Erledigt! Ich habe das vergessen, es hat in meinem Test funktioniert (Dateien mit dem Namen 1-1000.JPEG nacheinander): P.
crazy2be

3

Dafür gibt es ein Werkzeug:

sudo apt-get install renameutilsoder klicken Sie auf umbenennen

(falls nicht bereits installiert)

wo Sie tun können (von der Kommandozeile):

rename s/\.JPEG$/\.jpeg/ *.JPEG


2

Fand es eine Sekunde nach dem Posten:

rename 's/\.JPEG$/.jpeg/' *

1
Eine kleine Optimierung, aber für eine große Anzahl von Dateien wird meine Antwort (und die Antwort von tgm) bevorzugt, da weniger Dateien zum renameParsen gesendet werden. *stimmt mit allem in einem Verzeichnis überein, in dem *.JPEGwirklich nur die Dateien übereinstimmen, mit denen postfixiert wurde .JPEG.
Lekensteyn

1

Verwenden Sie den Befehl zum Umbenennen. Es unterscheidet sich von Verschieben und führt häufig zu Verwirrung, da es speziell für die Umbenennung von Bildern erstellt wurde.

So etwas wie dieser Befehl sollte funktionieren (für alle Dateien, die mit .JPEG enden, ändern Sie .JPEG in .jpeg)

Benennen Sie -ns / .JPEG $ / .jpeg / '* .JPEG um


1

Dinge zu tun , in parallel wird immer mehr und mehr an Bedeutung, daher empfehle ich:

parallel mv {} {.}.jpg ::: *.JPG

Dieses Dienstprogramm ist jedoch nicht standardmäßig installiert.


Schön, das zu wissen, aber ich brauche wirklich etwas schnelles und schmutziges und kümmere mich nicht wirklich um Leistung / Effizienz
Itay Moav-Malimovka

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.