Як я можу змінити пакетну дату створення файлів на OS X 10.6.8?


6

Зверніть увагу, що я не запитую, як змінити дату створення купи файлів на задану дату. Я хочу перенести дату на заданий проміжок часу, наприклад 47732400 секунд.

Чи можу я це досягти, використовуючи touchщось інше в BASH?

Відповіді:


6

Торкніться лише зміни часу створення, якщо цільовий час модифікації передує початковому часу створення.

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: змінити час створення


Лаурі Ранта, ти свята!
bernk

Я мушу визнати, що ваш сценарій не працює для мене, але найважливіше - ви познайомили мене з SetFile і добре вивели мене на шляху. Я також не розумію причину цитат навколо деяких змінних. Зовсім нове в сценічних сценаріях.
Бернк

Цитати, щоб переконатися, що він працює, навіть якщо у ваших іменах є пробіли.
ckhan

Зрозумів, що зрештою, також я беру назад свій попередній коментар про те, що сценарій не працює для мене. Це робить. Я не впевнений, що я зробив неправильно спочатку, але це була моя вина. Знову дякую! Зараз я можу виправити купу відеофайлів, які були зняті на камеру з неправильним налаштуванням дати.
Бернк

Якщо хтось шукає еквівалент Linux, ось модифіковані команди в циклі for: old=$(stat -c %Y "$f")і touch -t $(date -d @$(($old - 47732400)) +%Y%m%d%H%M.%S) "$f".
Але

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.