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?

Itay Moav-Malimovka
quelle

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 .
Lekensteyn
quelle
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.

crazy2be
quelle
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

Rinzwind
quelle
2

Fand es eine Sekunde nach dem Posten:

rename 's/\.JPEG$/.jpeg/' *
Itay Moav-Malimovka
quelle
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

tgm4883
quelle
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.

Sebastian
quelle
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
0

Wenn Sie nach einer netten GUI-Lösung suchen und sich nicht mit komplizierten Befehlszeilenargumenten herumschlagen möchten, steht Ihnen ein großartiges Nautilus-Skript zum Umbenennen von Dateien zur Verfügung. Es hat eine einfache Oberfläche und viele Optionen.

Hier verfügbar: http://gnome-look.org/content/show.php/Renamer?content=87601

MarkovCh1
quelle