И вдруг, через некоторое время обнаруживаете, что количество отснятых фотографий растёт, как снежный ком. Правильные люди заблаговременно создают один каталог для
Увы, я всего лишь обычный разгильдяй и потому мои фото были разбросаны по паре-тройке каталогов (в каждом из которых были подкаталоги типа "поездка на Киран" или "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 (или где там у вас
В результате, последовательно натравив find на все каталоги, где хранятся фотографии, мы получим все их в одном месте, без дубликатов и с осмысленными (относительно, разумеется) именами.
Теперь можно открывать окно Наутилуса (или любого другого графического файлового менеджера) и разбрасывать фотографии по тематическим каталогам. Ну, или оставить в общей куче. Это уж на ваш вкус.
Завершающим штрихом будет натравливание на этот каталог F-Spot'а (или Google Picasa), навешивание тэгов и прочая обработка.
P.S. Что касается raw-файлов, то их обработка практически ничем не отличается (нужно только сменить расширение в скрипте и в параметре поиска). Оставляю это желающим в качестве домашнего задания.
P.P.S. Может стоит вставить сюда пару-тройку скриншотов?
upd: вспомнилось, что ещё оставалась проблема - часть файлов имела расширение *.JPG, а часть - *.jpg. Поскольку дело было вечером - оставил на утро. А утром решение само пришло... На ловца и зверь бежит, да. :)
Да...
ОтветитьУдалитьНе перестаю удивляться разнообразию человеческой природы. Мне даже в голову не могло прийти, что фотографии можно хранить где-то, кроме изначально систематизированного каталога. Опять же: я скорее уничтожу лишнее, чем обнаружу на винте хоть один jpeg в двух экземплярах. Причём, чем меньше осталось от "чернового" материала, тем удовлетворение - больше. Запасы и архивы утомляют меня самим фактом своего существования :). Возможно, этим всё и определяется?
А подход - радует. Впрочем, об этом можно было и не говорить, наверное ? :)
Собственно, всё просто - один раз скопировали всё с флэшки в один каталог.
ОтветитьУдалитьЧерез пару недель скопировали всё то же плюс нафотографированное ещё - в другой. :)
Оно, конечно, неправильно, но так уж выходит...
Не... "всё то же плюс..." у меня не бывает. Наверное, потому, что операция "по умолчанию" у меня move. Это для copy мне умственное напряжение требуется :)
ОтветитьУдалитьКруто!
ОтветитьУдалитьЯ храню точно также - дублируются редко, но есть - когда лень было очищать флешку. Так и заливал на диски - с мыслями "авось потом разберусь" :).
Про exif до меня бы не дошло, наверное :). Спасибо, полезный совет, принял на заметку.
А разве пикаса почти тем же самым не занимается?:) Разве что локацию не меняет, и названия файлов, но при этом выстраивает все по датам и тд.
ОтветитьУдалитьДа, и Picasa, и F-Spot.
ОтветитьУдалитьПроблема была несколько в другом:
а) дубликаты, разбросаные по разным каталогам;
б) сама разбросанность по разным каталогам;
в) неуникальные имена файлов;
Мне кажется, описанный вариант ммм... элегантнее, что ли. :)
Копирование с флешки - гораздо более правильная операция, чем перемещение, это очевидно. Не стоит слишком хорошо думать о производителях чипов: они не оптимизируют использование матрицы флешки, если только специально не делают это в дорогих версиях чипов. Так что однозначно лучше следить за равномерностью использования флешки самому, и не стирать с неё ничего до полного заполнения.
ОтветитьУдалитьСпасибо за интересную статью ;)
PS: регистр имён файлов мне всегда помогает сменить Midnight Commander со своими shell patterns.
#!/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 присваевается вывод того что в `` но! потом то как это используется? может всеже опечатка? и должно быть cp $name ~/Фотографии ? Вы не подумайте что спецально придираюсь просто тема хорошая и актуальная у самого такой же бордак с фотографиями....
Тут есть одна тонкость: ни F-Spot, ни Picasa пока не умеют искать дубликаты. Для F-Spot, правда, вроде был патч.
ОтветитьУдалить#!/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 присваевается вывод того что в `` но! потом то как это используется? может всеже опечатка? и должно быть cp $name ~/Фотографии ? Вы не подумайте что спецально придираюсь просто тема хорошая и актуальная у самого такой же бордак с фотографиями....
Пардон. Опечатка всё же вкралась.
Принцип там предельно простой - выдираем строку "Дата - время" и выбрасываем из неё все лишние символы. Потом приписываем .jpg
В результате, получаем имя файла вида:
ГодМесяцДень-ЧасыМинутыСекунды.jpg
Разумеется, последняя строка скрипта должна выглядеть так:
cp $1 ~/Фотографии/$name
Использую:
ОтветитьУдалитьpkg_info | grep p5
p5-Image-ExifTool-6.76 Perl module for getting EXIF data from image files
Написал самописный скриптик на его базе - доволен.