Как я могу пакетно сдвинуть дату создания файлов на OS X 10.6.8?


6

Обратите внимание, что я не спрашиваю, как изменить дату создания группы файлов на данную дату. Я хочу сдвинуть дату на указанное количество времени, например 47732400 секунд.

Могу ли я сделать это с помощью touchили что-то еще в BASH?

Ответы:


6

Touch только изменяет время создания, если целевое время модификации предшествует первоначальному времени создания.

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 всегда меняет время создания. Он поставляется с пакетом инструментов командной строки, который можно загрузить из настроек XCode или с веб-сайта Apple .

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: форматировать время рождения, время форматировать секунды с начала эпохи
date -r: переформатировать секунды с начала эпохи
touch -t: изменять время доступа и модификации
SetFile -d: изменять время создания


Лаури Ранта, ты святой!
Бернк

Я должен признать, что ваш сценарий не работает для меня, но самое главное, что вы познакомили меня с SetFile и помогли мне в этом. Я также не понимаю причину кавычек вокруг некоторых переменных. Абсолютно новый для сценариев Bash.
Бернк

Кавычки, чтобы гарантировать, что это работает, даже если у Ваших имен файла есть пробелы в них.
чхан

Понял, что в конце концов, также я забираю свой предыдущий комментарий о том, что скрипт не работает для меня. Оно делает. Я не уверен, что сначала я поступил неправильно, но это была моя вина. Еще раз спасибо! Теперь я могу исправить кучу видеофайлов, снятых на камеру с неправильной настройкой даты.
Бернк

Если кто-то ищет эквивалент Linux, вот измененные команды в цикле for: old=$(stat -c %Y "$f")и touch -t $(date -d @$(($old - 47732400)) +%Y%m%d%H%M.%S) "$f".
Ale

0

Повторное использование и расширение предыдущего ответа для изменения даты в файлах со справочным файлом / датой (старая версия GoPro всегда сбрасывает время на 2009 ...)

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.