2014-09-21 2 views
0

Я хотел бы сделать список фотографий внутри каталога и проверить, есть ли у них время захвата или нет. Если нет, я хотел бы добавить время захвата как минимум даты модификации, даты создания ...Исправление времени захвата в файлах изображений

Есть ли команда для чтения и назначения даты захвата изображения в файлы изображений с помощью команд bash?

+0

Не встроенный в bash, нет. Доступно для вашей операционной системы, вполне возможно, да - см. ImageMagick или его новое воплощение GraphicsMagick. –

+0

Очень немногие команды (относительно говоря) на самом деле являются «командами bash» - почти все, что вы запускаете (даже 'ls'!), Не является командой bash, а командой UNIX, которая отлично работает с любой другой оболочкой или без оболочки на все. –

+0

«gm идентифицировать -debug все» $My_image_file_here », в частности, выделяет метаданные, которые он способен декодировать; вы хотите посмотреть его вывод для ваших конкретных изображений, чтобы узнать, содержит ли он то, что вам нужно для их формата. –

ответ

2

Для этого вы можете использовать jhead. В базовой форме вы бежите

jhead file.jpg 

File size : 1926198 bytes 
File date : 2014:03:01 11:59:27  
Camera make : Apple 
Camera model : iPhone 5 
Date/Time : 2014:03:01 11:59:27 

И вы можете видеть, что это дает вам время и дату, когда была снята фотография.

Если нет, то вы можете использовать следующие действия для создания раздела EXIF ​​и установить дату/время, чтобы во время файловой системы файла:

jhead -mkexif image.jpg 

jhead image.jpg 
File size : 1926198 bytes 
File date : 2014:09:21 18:46:11 
Camera make : Apple 
Camera model : iPhone 5 
Date/Time : 2014:09:21 18:46:11 

или в качестве альтернативы, используйте следующее для установки дата/время, указанного в командной строке:

jhead -dsyyyy:mm:dd file.jpg 

Например:

jhead -ds2014:01:02 IMG_1594.JPG 

jhead IMG_1594.JPG 
File size : 1926198 bytes 
File date : 2014:09:21 18:46:11 
Camera make : Apple 
Camera model : iPhone 5 
Date/Time : 2014:01:02 18:46:11  <------- 

Взяв все это, вы получите следующее:

#!/bin/bash 
shopt -s nullglob        # Do nothing if no files present 
shopt -s nocaseglob        # Match upper and lower case jpg/JPG 
for f in *.jpg; do        # Loop through all files 
    jhead "$f" | grep "^Date/Time"    # Check if date and time present 
    if [ $? -eq 0 ]; then      # If set, 
     echo File: $f - Date/Time already set # ... do nothing 
    else 
     echo File: $f - Setting Date/Time as per filesystem 
     jhead -mkexif "$f"      # ... else create an EXIF section 
    fi 
done 

Перед тем, как запустить это, сделайте РЕЗЕРВНОЕ КОПИРОВАНИЕ !!!!!

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