GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Shell:Umbenennen von Dateien zur Erstellungszeit

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, die date mitteilt um das Datum der Datei anstelle des aktuellen Datums anzuzeigen. Die Angabe +"%Y%m%d_%H%M%S" sagt date 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 auf mv 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 nach awk 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.


Linux
  1. So finden und sortieren Sie Dateien basierend auf Änderungsdatum und -zeit in Linux

  2. Befehl zum Abrufen der Zeit in Millisekunden

  3. Finden Sie Dateien, die zwischen einem Datumsbereich erstellt wurden

  4. Linux Dateien in Großbuchstaben umbenennen

  5. Alle Dateien in Unterverzeichnissen kopieren und umbenennen statt überschreiben

Erstellen Sie Verzeichnisse oder Dateien, die nach aktuellem Datum / Uhrzeit / Monat / Jahr benannt sind

So stellen Sie Datum, Uhrzeit und Zeitzone in RHEL 8 ein

11 Nützliche Beispiele für Linux-Datumsbefehle

So stellen Sie Datum und Uhrzeit unter Linux ein

Zeitanzeige zeigt Datum/Uhrzeit nicht an?

Beispiele für Linux-Datumsbefehle