Евгений Чайкин aka StraNNik
2008-04-10
Однажды вы становитесь счастливым владельцем цифрового фотоаппарата.
И вдруг, через некоторое время обнаруживаете, что количество отснятых фотографий растёт, как снежный ком. Правильные люди заблаговременно создают один каталог для всего этого барахла своих шедевров, создавая в нём тематические подкаталоги.
Увы, я всего лишь обычный разгильдяй и потому мои фото были разбросаны по паре-тройке каталогов (в каждом из которых были подкаталоги типа "поездка на Киран" или "10.07.06" и т.п.) Для полноты картины, часть каталогов находилась на NTFS-разделе Windows, а часть - на ReiserFS-разделе Linux. Чтобы окончательно уронить себя в глазах аккуратистов, добавлю - многие фотографии дублировались (берём фотоаппарат, копируем с него фото в один каталог, снимаем ещё, переносим с него фото в другой каталог) - и так до бесконечности.
Я надеюсь все уже прониклись ощущением того как всё запущено?
В один прекрасный день, когда я устал рыться по каталогам в поисках нужного фото (постоянно натыкаясь на дубликаты ненужных) было принято волевое решение - с беспорядком пора покончить. Раз и навсегда!
Сказано - сделано. Обработке подлежали как jpg-файлы, так и raw. И те, и другие содержали EXIF-информацию. Т.е. следовало часть этой информации из них извлечь и, исходя из неё, переименовать файлы (благодаря камере в этих каталогах содержалась куча файлов вида: P2100155.JPG).
Формат имени даты был принят таким: 20070717-145203.jpg, т.е. эта фотография была снята в 2007 году, 17 июля, в 14:52:03. Таким образом, фотографии автоматически сортируются в каталоге по дате, а дублирующиеся имена будут означать именно копию одного и того же снимка.
Итак, начнём подготовку к страшному колдунству. В первую очередь нам понадобится пакет exifprobe. Его нам обеспечит заклинание:
$sudo aptitude install exifprobe
Немного поколдовав, создадим скрипт с таким содержимым:
#!/bin/bash
name=`exifprobe -L $1 | grep 'JPEG.APP1.Ifd0.DateTime' \
| awk '{print $3,$4}' | cut -c 2-20 | sed 's/://g' \
| sed 's/ /-/g'`.jpg
cp $1 ~/Фотографии/$name
Сделаем его исполняемым и будем запускать таким образом:
find /home/share/photos -iname *.jpg \
-exec /home/strannick/bin/script.sh {} \;
Команда find, покопавшись в /home/share/photos (или где там у вас свалка склад фото) находит все файлы с расширением *.jpg и копирует их в ~/Фотографии (или куда укажете в скрипте), одновременно переименовывая, как было оговорено выше.
В результате, последовательно натравив find на все каталоги, где хранятся фотографии, мы получим все их в одном месте, без дубликатов и с осмысленными (относительно, разумеется) именами.
Теперь можно открывать окно Наутилуса (или любого другого графического файлового менеджера) и разбрасывать фотографии по тематическим каталогам. Ну, или оставить в общей куче. Это уж на ваш вкус.
Завершающим штрихом будет натравливание на этот каталог F-Spot'а (или Google Picasa), навешивание тэгов и прочая обработка.
P.S. Что касается raw-файлов, то их обработка практически ничем не отличается (нужно только сменить расширение в скрипте и в параметре поиска). Оставляю это желающим в качестве домашнего задания. P.P.S. Может стоит вставить сюда пару-тройку скриншотов?
upd: вспомнилось, что ещё оставалась проблема - часть файлов имела расширение *.JPG, а часть - *.jpg. Поскольку дело было вечером - оставил на утро. А утром решение само пришло... На ловца и зверь бежит, да. :)
Как мне любезно подсказал автор - всё, описанное мной в заметке "Цифровые фотографии. Наводим порядок" гораздо удобнее реализуется с помощью готовой программы RenRot.
Кроме переименования по дате съёмки (или по дате изменения) взятой их EXIF'а, этот скрипт умеет поворачивать изображения согласно EXIF-тэгу (жаль моя камера его не прописывает!). Для полного счастья скрипт умеет вносить комментарии в соответствующие тэги, а также разбрасывать фотографии по подкаталогам исходя из даты их создания.
Особо отмечу, что установка скрипта в Убунту (и Дебиане, разумеется) не должна вызвать никаких затруднений, поскольку автор озаботился сборкой deb-пакета. Для любителей rpm-based дистрибутивов есть и rpm'ы.
Что ж, возьму на вооружение данный скрипт, а для себя сделаю вывод, что даже при его отсутствии такая задача не станет проблемой, если иметь представление о началах работы в консоли.