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?

Eure Majestät
quelle
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.

John1024
quelle
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
nux
quelle
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