2013-10-27 2 views
1

Я пытаюсь без успеха перенести дату создания из одного файла в другой на OS X 10.8 (Mountain Lion) с помощью Bash. Вероятно, это комбинация stat и touch, но я не совсем понял это, потому что формат, используемый stat, не соответствует тому, что нужно прикосновением.Перенос даты создания из одного файла в другой

Это то, что я пробовал до сих пор. Это часть сценария преобразования видео, который стирает дату создания:

for f in "[email protected]" 
do 
    # convert video 
    HandBrakeCLI -i "$f" -o "/Users/J/Desktop/$(basename $f .AVI).mp4" -e x264 -q 20 -B 160 

    # read out creation date from source file 
    date_transfer=$(stat -f "%Sm" "$f")  # output e.g.: Oct 27 16:33:41 2013 

    # write creation date of source to converted file 
    touch -t $date_transfer /Users/J/Desktop/$(basename $f .AVI).mp4 # requires 201310271633 instead 
done 

ответ

1

Преобразование формата времени может быть выполнено с помощью date Утилита:

на Linux (GNU Coreutils):

$ date -d 'Oct 27 16:33:41 2013' '+%Y%m%d%H%M' 
201310271633 

На OS X (date options взяты из Darwin страницах руководства доступны в Интернете):

$ date -j -f '%b %d %T %Y' 'Oct 27 16:33:41 2013' '+%Y%m%d%H%M' 
201310271633 

Ваш код должен выглядеть следующим образом (на OS X):

for f in "[email protected]" 
do 
    # convert video 
    HandBrakeCLI -i "$f" -o "/Users/J/Desktop/$(basename "$f" .AVI).mp4" -e x264 -q 20 -B 160 

    # read out creation date from source file 
    date_transfer=$(stat -f '%Sm' "$f") 

    # write creation date of source to converted file 
    touch -t $(date -j -f '%b %d %T %Y' "$date_transfer" '+%Y%m%d%H%M') /Users/J/Desktop/$(basename "$f" .AVI).mp4 
done 

Обратите внимание на цитаты $date_transfer. Дата хочет получить дату как один параметр, и оболочка разделит части date_transfer на пробелы, если котировки отсутствовали.

0

Попытка: Дата -d $date_transfer +% Y% м% d% H% M

formatted_date=$(date -d$date_transfer +%Y%m%d%H%M)

touch -t $formatted_date /Users/J/Desktop/$(basename $f .AVI).mp4

+0

Это не будет работать на OS X, из-за отличия в 'date' вариантов полезности. Я уже дал более полный ответ. – Palec

1

Вам не нужно бороться с датой форматирования: используйте touch -r refFile fileToBeChanged

Вашего кода будет выглядеть следующим образом:

for f in "[email protected]" 
do 
    # convert video 
    HandBrakeCLI -i "$f" -o "/Users/J/Desktop/$(basename $f .AVI).mp4" -e x264 -q 20 -B 160 

    # transfer creation date of source to converted file 
    touch -r "$f" /Users/J/Desktop/$(basename $f .AVI).mp4 
done 
+0

Привет Гленн, хорошо пятнистый. Это делает скрипт намного проще и обходит беспорядочную конверсию даты. Благодарю. – Jax

Смежные вопросы