Umbenennen einer Reihe von Dateien über die Befehlszeile


7

Angenommen, ich habe einen Ordner mit Tausenden von Fotos, die alle zufällig benannt wurden. Wie kann man sie von der Kommandozeile / dem Terminal aus in photo1, photo2, ..., photo1000 umbenennen?


Wenn es sich um Fotos handelt (und nicht um andere Arten von Dateien), ist ExifTool das Werkzeug.
vrdhn

Antworten:


11

Ich gehe davon aus, dass Sie ein korrektes Suffix für die Dateinamen beibehalten möchten:

c=1; for f in *.jpg ; do mv "$f" "photo$c.jpg" ; c=$(($c+1)) ; done

Anmerkungen

  • c=1: Dies initialisiert den Zähler. Sie können eine beliebige Zahl einstellen.

  • for f in *.jpg ; do: Dies bedeutet den Beginn einer Shell- forSchleife. Während es schwierig sein kann, Shell-Skripte zu erstellen, wenn Dateinamen Leerzeichen, Zeilenumbrüche oder andere schwierige Zeichen enthalten können, ist diese Konstruktion selbst gegen die feindlichsten Dateinamen sicher.

  • mv "$f" "photo$c.jpg": Dies verwendet den Zähler cund führt die eigentliche Umbenennung von Dateien durch. Der Dateiname $fsteht in doppelten Anführungszeichen, um den Namen vor den verschiedenen möglichen Shell-Erweiterungen zu schützen.

  • c=$(($c+1)): Dies erhöht den Zähler für die nächste Schleife

  • done: Das bedeutet das Ende der forSchleife.


1
mv "$f" "$(printf 'photo%04d.jpg' $c)"Alle Dateien erhalten eine 4-stellige, mit Nullen aufgefüllte Nummer, damit sie korrekt sortiert werden.
Sammitch

3

Sie können diesen Code verwenden:

for i in *.jpg; do let j+=1 ; mv "$i" "photo$j.jpg" ; done

1
Möglicherweise möchten Sie $idoppelte Anführungszeichen einfügen, um es vor Wortaufteilung zu schützen, falls seine Dateinamen Leerzeichen oder andere schwierige Zeichen enthalten.
John1024

@ John1024, das richtig, danke
Nux
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.