31 Stimmen

JPG-Dateien nach dem Erstellungsdatum umbenennen

Ich möchte alle Dateien in einem bestimmten Verzeichnis umbenennen. Sie sollen nach ihrem Erstellungsdatum umbenannt werden.
Wenn meine Datei also Image1.jpg heißt, sollte sie in etwas wie "Jan 16 12:09:42 2011.jpg" umbenannt werden.
Ich möchte dies über die Befehlszeile tun. Ich habe es schon versucht:

stat -f %SB Image0100.jpg

Aber wie kann ich das kombinieren mit mv Befehl? Und wie wird die Iteration stat et mv durch die gesamten Akten?
Oder gibt es eine einfache Möglichkeit, alle Dateien nach ihrem Erstellungsdatum umzubenennen?

63voto

Theo Band Punkte 626
jhead -n DSCN0382.JPG
DSCN0382.JPG --> 0408-150734.jpg

kann auch ein beliebiges strftime-Argument angegeben werden:

jhead -n%Y%m%d-%H%M%S *.jpg 

Damit werden Dateien, die mit *.jpg übereinstimmen, im Format JJJJMMTT-HHMMSS umbenannt.

jhead -n%Y%m%d-%H%M%S DSCN0382.JPG
DSCN0382.JPG --> 20120408-150734.jpg

siehe auch die Manpage für viele andere coole Optionen. Sie können zum Beispiel das EXIF-Datum korrigieren (verschieben). Dies ist sehr praktisch beim Zusammenführen von Dateien aus verschiedenen Kameras, wenn einige Kameras eine falsche Zeit eingestellt haben.

15voto

fseto Punkte 9212

Wenn Sie mit JPG-Dateien arbeiten, die Folgendes enthalten EXIF Daten (z. B. von einer Digitalkamera), dann können Sie folgendes verwenden, um das Erstellungsdatum anstelle von stat.

exif -t 0x9003 -m Image0100.jpg

Wie gewünscht, hier der Befehl und die Ausgabe. Ein paar Punkte zu beachten:

  • Da nicht jede Datei Exif-Daten hat, wollen wir prüfen, ob dst gültig ist, bevor Sie den Rest der Befehle ausführen.
  • Die Ausgabe von exif hat ein Leerzeichen, was bei Dateinamen ein Hindernis darstellt. Verwenden Sie sed, um es durch '-' zu ersetzen.
  • Beachten Sie, dass ich 'echo' vor dem mv verwende, um meine Skripte zu testen. Wenn Sie sicher sind, dass es das Richtige tut, können Sie das "echo" entfernen... Sie wollen ja nicht wie der Typ enden, dem alle Dateien weggeblasen wurden.

Befehl

for i in *.jpg; do
  dst=$(exif -t 0x9003 -m $i ) &&
  dst_esc=$(echo $dst | sed 's/ /-/g' ) &&
  echo mv $i $dst_esc.jpg
done

Ausgabe

'12379632.jpg' does not contain tag 'DateTimeOriginal'.
mv 15084688.jpg 2003:02:28-21:48:54.jpg
mv 15136312.jpg 2003:03:01-10:36:05.jpg
mv 15137960.jpg 2003:03:01-10:36:38.jpg
mv 15140744.jpg 2003:03:01-10:37:46.jpg

5voto

ghostdog74 Punkte 305138
for file in *jpg
do
 newfile=$(date "+%b %d %H:%M:%S%Y $file" -d "$(stat -c "%y" $file)")
 mv "$file" "$newfile"
done$

2voto

xxjjnn Punkte 13550

Außerdem gibt es:

rename -v 's/.JPG/.jpeg/' *.JPG
rename -v 's/.jpeg/.jpg/' *.jpeg
exiv2 -r'RP_%Y%m%d_%H%M%S' rename *.jpg

um zum Beispiel RP_20120801_063021.jpg zu erhalten. Dies funktioniert bei Debian-Linuxen (z. B. Ubuntu).

Die Umbenennungsbefehle sind für Bilder mit der Endung .JPG oder .jpeg gedacht. JPG kann nicht direkt in .jpg umgewandelt werden, da es als dasselbe interpretiert wird...

1voto

Die meisten POSIX-Dateisysteme zeichnen die Erstellungszeit nicht auf (und die API gibt sie auch nicht preis, selbst wenn sie aufgezeichnet wird), also sind Sie aufgeschmissen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X