Wie kann ich das Erstellungsdatum von Dateien unter OS X 10.6.8 stapelweise verschieben?

6

Bitte beachten Sie, dass ich nicht frage, wie das Erstellungsdatum einer Reihe von Dateien auf ein bestimmtes Datum geändert werden soll. Ich mag verschieben das Datum um einen bestimmten Betrag von Zeit, zum Beispiel 47732400 Sekunden.

Kann ich dies mit touchoder etwas anderem in BASH erreichen?

bernk
quelle

Antworten:

6

touch ändert die Erstellungszeit nur, wenn die Zieländerungszeit vor der ursprünglichen Erstellungszeit liegt.

for f in ~/Desktop/*; do
    old=$(stat -f %B -t %s "$f")
    touch -t $(date -r $(($old - 1234567)) +%Y%m%d%H%M%S) "$f"
done

SetFile ändert immer die Erstellungszeit. Es wird mit dem Kommandozeilen-Tool-Paket geliefert, das Sie in den Xcode-Einstellungen oder auf der Apple-Website herunterladen können .

for f in ~/Desktop/*; do
    old=$(stat -f %B -t %s "$f")
    new=$(date -r $(($old + 1234567)) '+%m/%d/%Y %H:%M:%S')
    SetFile -d "$new" -m "$new" "$f"
done

stat -f %B -t %s: Geburtszeit formatieren, Zeitformat Sekunden seit Epoche
date -r: Sekunden seit Epoche neu formatieren
touch -t: Zugriffs- und Änderungszeiten
SetFile -dändern: Erstellungszeit ändern

Lri
quelle
Lauri Ranta, du bist eine Heilige!
bernk
Ich muss zugeben, dass Ihr Skript für mich nicht funktioniert, aber das Wichtigste ist, dass Sie mich mit SetFile bekannt gemacht und mich gut auf den Weg gebracht haben. Ich verstehe auch nicht den Grund für die Anführungszeichen um einige der Variablen. Völlig neu für Bash-Skripte.
bernk
Anführungszeichen, um sicherzustellen, dass es funktioniert, auch wenn Ihre Dateinamen Leerzeichen enthalten.
Ckhan
Nachdem ich das irgendwann herausgefunden habe, nehme ich auch meinen vorherigen Kommentar zurück, dass das Skript bei mir nicht funktioniert. Es tut. Ich bin mir nicht sicher, was ich zuerst falsch gemacht habe, aber es war meine Schuld. Danke noch einmal! Ich kann jetzt eine Reihe von Videodateien reparieren, die mit einer Kamera mit einer falschen Datumseinstellung aufgenommen wurden.
Bernk
Wenn jemand nach einem Linux-Äquivalent sucht, finden Sie hier die geänderten Befehle in der for-Schleife: old=$(stat -c %Y "$f")und touch -t $(date -d @$(($old - 47732400)) +%Y%m%d%H%M.%S) "$f".
Ale
0

Wiederverwenden und Verbessern einer vorherigen Antwort zum Verschieben von Dateidaten mit einer Referenzdatei / einem Referenzdatum (die alte GoPro hat ihre Zeit immer auf 2009 zurückgesetzt.)

ref_file=GOPR3440.MP4
new_time_for_that_file=0327160015 #date's format: 27th March 2015, 16:00

ref_file_timestamp=`stat -f %B -t %s "$ref_file"`
new_time_timestamp=`date -j $new_time_for_that_file +%s`
time_diff=$[$new_time_timestamp - $ref_file_timestamp]

for f in *; do
    old=$(stat -f %B -t %s "$f")
    new=$(date -r $(($old + $time_diff)) '+%m/%d/%Y %H:%M:%S')
    SetFile -d "$new" -m "$new" "$f"
done
jobwat
quelle