Stapelbefehl, um das Erstellungsdatum jeder Datei so zu ändern, dass es mit den Informationen im Dateinamen übereinstimmt

Ich habe einen Ordner mit mehreren hundert Videodateien. Alle Dateinamen haben dieses Format:

2011-08-27 11.18.00

Leider ist das „Erstellungsdatum“ für jede Datei das Datum, an dem sie konvertiert wurden (ein Datum im Jahr 2014), nicht das Datum, an dem sie ursprünglich aufgenommen wurde (im Dateinamen angegeben).

Ich habe festgestellt, dass der Operator touch -t verwendet werden kann, um das Erstellungsdatum einer einzelnen Datei zu ändern.

Geben Sie hier die Bildbeschreibung ein

Unten: Datei, bei der ich das Erstellungsdatum (mit obigem Befehl) erfolgreich geändert habe, und Datei, bei der das Erstellungsdatum immer noch falsch ist.

Geben Sie hier die Bildbeschreibung ein

Kann jemand mit dem Terminalcode helfen, der YYYYMMDDhhmm-Informationen aus jedem Dateinamen extrahiert und sie für die touch -t- Operation für diese Datei in einem Batch-Vorgang verwendet?

Ich möchte, dass das Erstellungsdatum / die Uhrzeit korrekt sind, damit sich beim Importieren in meine Bibliothek jede Datei an der richtigen Stelle in der Zeitleiste befindet.

Mac OS: El Capitan 10.11.5

Terminalversion: 2.6.1

Danke an alle.

Antworten (1)

  • Terminal öffnen
  • Geben Sie cd(einschließlich des abschließenden Leerzeichens) ein und ziehen Sie den Ordner mit den umzubenennenden Dateien in das Terminalfenster (der Ordner ist wahrscheinlich Desktop/PRIMARYVIDEOS, daher sollte der Befehl wie folgt aussehen cd /Users/Andrew/Desktop/PRIMARYVIDEOS)
  • Drücken Sie Enter
  • tippen (oder kopieren/einfügen)

    for f in *; do t=$(echo $f | sed -E 's/[-. mov]//g'); echo touch -t $t "$f"; done
    
  • Drücken Sie Enter
  • wenn (und nur wenn) dies zu einer Liste von touchBefehlen führt, die ok aussehen, geben Sie ein (oder kopieren/einfügen)

    for f in *; do t=$(echo $f | sed -E 's/[-. mov]//g'); touch -t $t "$f"; done
    
  • Drücken Sie Enter
@andyp Sieht gut aus, probier es aus :-)
Hallo @patrix Wir kommen irgendwo hin! Ihr erstes Stück Code für vier Dateien in einem Testordner endete für jede mit ungefähr so: touch -t 20110107141300 2011-01-07 14.13.00.mov. Beim Ausführen der zweiten Codezeile danach bekam ich jedoch jeweils diesen Fehler: touch: out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS] Die Dateinamen gehen bis auf die Sekunde runter, die touch kann nicht umgehen. Das oberste Bit des Codes hat die Informationen über die Sekunden nicht abgeschnitten, was meiner Meinung nach den Fehler verursacht hat
Wenn es @patrix hilft, sieht es so aus, als ob die Sekundeninformationen in jedem Dateinamen immer 00 sind (also sieht jeder Dateiname immer so aus: YYYY-MM-DD hh.mm.00.mov)
Hi @patrix - Ich habe die Information im Dateinamen über die Sekunden für jede meiner vier Testdateien entfernt (z. B. so dass der erste Code jetzt erzeugt: touch -t 201101071413 2011-01-07 14.13.mov) und der obige Code funktioniert PERFEKT! Gibt es eine Möglichkeit, es so zu optimieren, dass ich es auf all meinen Hunderten anderer Dateien ausführen kann, ohne jeden Dateinamen ändern zu müssen, um die Sekunden zu entfernen?
HURRA! Ich verwende die Finder-Batch-Umbenennungsfunktion, um .00.mov durch absolut nichts zu ersetzen. Dadurch konnte der obige Code für alle mehreren hundert Dateien in meinem primären Ordner funktionieren. Du @patrix bist eine Legende. Danke schön.