Danke an @John1024 !
Ich musste Dateien mit unterschiedlichen Erweiterungen gleichzeitig nach dem Datum der letzten Änderung umbenennen:
for f in *; do
fn=$(basename "$f")
mv "$fn" "$(date -r "$f" +"%Y-%m-%d_%H-%M-%S")_$fn"
done
"DSC_0189.JPG" ➜ "2016-02-21_18-22-15_DSC_0189.JPG"
"MOV_0131.avi" ➜ "2016-01-01_20-30-31_MOV_0131.avi"
Wenn Sie den ursprünglichen Dateinamen nicht beibehalten möchten:
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
Hoffe, es hilft Noobs wie mir!
Benennung nach Dateisystemdatum
In der Linux-Shell:
for f in *.jpg
do
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
done
Erklärung :
-
for f in *.jpg do
Dies startet die Schleife über alle JPEG-Dateien. Ein Merkmal davon ist, dass es mit allen Dateinamen funktioniert, sogar solchen mit Leerzeichen, Tabulatoren oder anderen schwierigen Zeichen im Namen.
-
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
Dadurch wird die Datei umbenannt. Es verwendet den
-r
Option, diedate
mitteilt um das Datum der Datei anstelle des aktuellen Datums anzuzeigen. Die Angabe+"%Y%m%d_%H%M%S"
sagtdate
um es so zu formatieren, wie Sie es angegeben haben.Der Dateiname,
$f
, wird in doppelte Anführungszeichen gesetzt, wo immer es verwendet wird. Dadurch wird sichergestellt, dass ungerade Dateinamen keine Fehler verursachen.Die
-n
Option aufmv
weist move an, niemals eine vorhandene Datei zu überschreiben. -
done
Damit ist die Schleife abgeschlossen.
Für die interaktive Verwendung ziehen Sie es vielleicht vor, dass der Befehl in einer Zeile steht. Verwenden Sie in diesem Fall:
for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
Benennung basierend auf dem EXIF-Erstellungsdatum
Um die Datei basierend auf dem EXIF-Erstellungsdatum (anstelle des Dateisystemdatums) zu benennen, benötigen wir exiftool
oder gleichwertig:
for f in *.jpg
do
mv -n "$f" "$(exiftool -d "%Y%m%d_%H%M%S" -CreateDate "$f" | awk '{print $4".jpg"}')"
done
Erklärung :
Das obige ist den Befehlen für das Dateidatum ziemlich ähnlich, aber mit der Verwendung von exiftool
und awk
um das Erstellungsdatum des EXIF-Bildes zu extrahieren.
-
Die
exiftool
Der Befehl liefert das Datum in einem Format wie:$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg Create Date : 20121027_181338
Das eigentliche gewünschte Datum ist das vierte Feld in der Ausgabe.
-
Wir passieren die
exiftool
Ausgabe nachawk
damit es das gewünschte Feld extrahieren kann:awk '{print $4".jpg"}'
Dies wählt das Datumsfeld aus und fügt auch die
.jpg
hinzu Erweiterung.
Versuchen Sie dies
for file in `ls -1 *.jpg`; do name=`stat -c %y $file | awk -F"." '{ print $1 }' | sed -e "s/\-//g" -e "s/\://g" -e "s/[ ]/_/g"`.jpg; mv $file $name; done
Obwohl es einen einfacheren Weg geben könnte.