2016-05-27 22 views
0

Я хочу организовать все мои семейные фотографии и фильмы. У меня есть пример кода, но я не могу обменивать символы в имени файла, используя команды -tr или -sed в BASH-коде и EXIFTOOL от Фила Харви. У кого-то есть идея?BASH Bulk переименовывает файлы фильмов, используя EXIFTOOL в качестве формата DATETIME рекурсивно [Year-Month-Day] [DayofWeek] [Hours.Minutes.Seconds] .extention

#!/bin/bash 
# scan the files you need 

for i in *jpg *mov *jpeg *mpg; *avi *mp4 do 

# Get the extension of the file 

extension=${i##*.} 

# Extract metadata from the file 

datetime=$(exiftool -f -s3 -"DateTimeOriginal" "${i}") 

# If the datetime value is empty (returned '-' because of the '-f' option) 
# then read another tag 

if [ "${datetime}" = '-' ]; then 
    datetime=$(exiftool -f -s3 -"MediaCreateDate" "${i}") 
fi 

# Construct the new filename from the metadata gathered above 

newfilename="${datetime}.${extension}" 


# Check if the destination filename already exists, and if not, 
# create the file 

if [ ! -e "${newfilename}" ]; then 

echo mv -v "${i}" "${newfilename}" 

else 
    echo "${i} would get renamed to ${newfilename} but that file already exists." 
fi 

done 
+0

Вы спрашиваете, как использовать 'tr' и' sed' для изменения '$ newfilename'? ps change 'for i in * jpg * mov * jpeg * mpg; * avi * mp4 do' to 'for i in * jpg * mov * jpeg * mpg * avi * mp4; do' – webb

ответ

1

Для этого не нужен сценарий, Exiftool может сделать это сам по себе.

Ваша команда будет выглядеть примерно так:
exiftool -ext jpg -ext mov -ext jpeg -ext mpg -ext avi -ext mp4 -d '[%Y-%m-%d][%A] [%H.%M.%S].%%e' '-Filename<MediaCreateDate' '-Filename<DateTimeOriginal' FileOrDir

Предел -ext вариант, что файл расширений для работы с.
Опция -d и шаблон, который следует за ней, сообщает Exiftool, какой формат использовать для тегов типа даты/времени. Более подробная информация найдена here
Следующие два варианта говорят exiftool, что файл будет переименован в соответствии с указанными тегами (MediaCreateDate или DateTimeOriginal). Более ранние параметры переопределяются более поздними опциями, поэтому DateTimeOriginal будет использоваться, если он существует, иначе MediaCreateDate. Если ни один из элементов не существует, произойдет незначительная ошибка, и файл не будет переименован. То же самое произойдет, если файл с таким именем уже существует, но %%c можно добавить в строку формата даты, чтобы добавить инкрементный номер в имя файла.

Вот пример вывода, где я использовал testname вместо filename.

'X:/!temp/0615090217.jpg' --> 'X:/!temp/[2009-06-15][Monday] [02.17.00].jpg' 
'X:/!temp/2013-07-18_12.19.38 - Copy.Jpg' --> 'X:/!temp/[2013-07-18][Thursday] [12.19.38].Jpg' 
'X:/!temp/DSC_7689 after.JPG' --> 'X:/!temp/[2006-08-19][Saturday] [09.13.28].JPG' 
'X:/!temp/FujiFilmFinePixF200EXR_F0Standard (Provia).jpg' --> 'X:/!temp/[2009-01-25][Sunday] [14.10.46].jpg' 
'X:/!temp/FujiFilmFinePixS5Pro.jpg' --> 'X:/!temp/[2006-12-20][Wednesday] [07.20.58].jpg' 
'X:/!temp/IMGP0713-XL.jpg' --> 'X:/!temp/[2011-03-10][Thursday] [14.10.54].jpg' 
'X:/!temp/IMGP0852.jpg' --> 'X:/!temp/[2003-04-20][Sunday] [16.36.53].jpg' 
'X:/!temp/IMG_0938.JPG' --> 'X:/!temp/[2000-01-02][Sunday] [03.04.10].JPG' 
'X:/!temp/RCNX0001.JPG' --> 'X:/!temp/[2015-12-20][Sunday] [09.09.05].JPG' 
'X:/!temp/Test1.mp4' --> 'X:/!temp/[2015-12-25][Friday] [15.46.15].mp4' 
'X:/!temp/Test4.jpg' --> 'X:/!temp/[2010-07-05][Monday] [12.53.36].jpg' 
'X:/!temp/Test4.mp4' --> 'X:/!temp/[2014-11-11][Tuesday] [11.11.11].mp4' 
'X:/!temp/tif.jpg' --> 'X:/!temp/[2003-03-03][Monday] [03.03.03].jpg' 
'X:/!temp/xyzzy.jpg' --> 'X:/!temp/[2012-04-04][Wednesday] [04.04.04].jpg' 

Я предполагаю, что вы используете Linux/Mac, а не Windows. В Windows одиночные кавычки будут заменены на двойные кавычки. Добавить -r для рекурсии.

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

  • Нет связанных вопросов^_^