А бывает, что есть несколько наборов фотографий, например кто-то снимал параллельно с вами. Хорошо бы их объединить и отсортировать по времени, но дурацкие имена (DSC0075.JPG !) не дают этого сделать. Выход простой - переименовать файлы, что бы в начале имени была дата. Причём обязательно от старших компонент к младшим: год-месяц-день-час-минута-секунда, иначе, например для шаблона день-месяц-год никакой вменяемой сортировки не получится.
Короче, набросал небольшой скрипт, переименовывающий пачку JPEG файлов по шаблону '<дата> <время>.jpg' Плюс к этому он разбрасывает их по дням, если хорошо попросить.
Работает в Линуксе, что само собой и в Windows из под Cygwin. Нужно только не забыть установить утилиту exif.
Итак скрипт с пояснениями:
#!/bin/bash
# (1)
if [[ $1 == "-h" || $1 == "--help" ]]; then
echo "usage: $0 [-d] [name suffix]"
echo "option -d create directories for each day";
exit;
fi
# (2)
CREATE_DIR=0
if [[ $1 == "-d" ]]; then CREATE_DIR=1; shift; fi
# (3)
for f in *.jpg *.JPG; do
# (4)
if [[ $f == "*.jpg" || $f == "*.JPG" ]]; then continue; fi
# (5)
DATETIME=$(exif -i "$f" | grep 0x9003 | sed -r 's/.*\|//; s/:/-/g; s/ *$//')
DATE=$(exif -i "$f" | grep 0x9003 | sed -r 's/.*\|//; s/:/-/g; s/ *$//; s/ .*$//')
if [[ $DATE == "" || $DATETIME == "" ]]; then continue; fi
# (6)
[[ ! -d $DATE && $CREATE_DIR == "1" ]] && mkdir -p $DATE
echo $f
# (7)
DST="${DATETIME}${1}.jpg"
if [[ $CREATE_DIR == "1" ]]; then DST="$DATE/${DATETIME}${1}.jpg"; fi
# (8)
mv "$f" "$DST"
done
1. Покажем помощь, если попросят
2. Проверяем наличие опции -d, создающей директории на каждый день
3. Пробегаем по всем файлам *.jpg и *.JPG (Мой фотик почему-то любит большие буквы, а Линуксу это критично)
4. Если по маске не найдено ни одного файла, то переменной присваивается сама маска. Это как-то непонятно, логичнее было бы присвоить пустоту, но это так в zsh по крайней мере. Пропускаем эту маску.
5. С помощью утилиты exif вычитываем дату создания (тех 0x9003) и дату-время. Если они пусты, пропускаем файл.
6. Если была опция -d и нужной директории нет - создаём её.
7. Конструируем имя файла(jpg в нижнем регистре, итить его мать этот фотик). Если была опция -d, добавляем к имени "директорию дня"
8. Перемещаем файл.
Использовать так:
sort-photos.shПереименует все фотки в формат "<дата> <время>.jpg"
sort-photos.sh -dПлюс ко всему рассортирует фотографии по дням.
sort-photos.sh ' Мой отпуск'Добавит в имя файла суффикс. Не забудьте лидирующий пробел! Получится что-то вроде '2009-01-23 14-00 Мой отпуск.jpg'
6 комментариев:
этож сколько нужно иметь терпения, чтоб ждать пока на фотоаппарате накопится туева хуча фоток???)))))
пару меяцев? если столь разные события... я свои практически сразу перебрасываю в отдельные папки и автоматически пишу число скидывания, если не помню дату праздника. хотя до такой степени тоже вроде не упивались)))))
Нужно не терпение, а лень :)
Большое спасибо за скрипт, очень помог навести порядок с результатом 5-дневной съемки на 10 фотиков.
Сергей Азаркевич! Может вы бы смогли бы опубликовать подробное расписание действий для чайников! а то очень надо, а программы нужной не найти...
Собственно скрипт не предназначен для чайников...
Но вообще всё просто. Копируем текст скрипта в файл, даём ему исполняемых прав и запускаем в консоли внутри директории с фотками.
Вот и всё :)
Да,видимо я совсем чайник в подобном программировании! может все и просто,но лично я ни одного из перечисленных действий не могу сделать,т.к. почти все сочетания слов которые их определяют мне ни о чем не говорят)жаль...
Отправить комментарий