(c) Larry Ewing, Simon Budig, Garrett LeSage
с 1994 г.

Кафедра Информатики и Математического Обеспечения

ПетрГУ | ИМиИТ | О кафедре | Мобильные платформы | Лаборатория ИТС | Семинары НФИ/AMICT
Сотрудники | Выпускники | Учебный процесс | Табель-календарь | Курсовые и выпускные работы
Вычислительные ресурсы | Публикации | Архив новостей | Контактная информация

Цель работы

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

Описание работы

Цифровые камеры внедряют в созданные JPEG-изображения сведения о параметрах съемки в формате EXIF (EXchangeable Image file Format). Этот формат, разработанный японской ассоциацией JEITA является чрезвычайно гибким, расширяемым и может быть использован для хранения данных, специфичных для конкретных моделей камер. Однако большинство цифровых фотокамер позволяют записывать данные о производителе и модели камеры, разрешении кадра, дате и времени съемки. Спецификации формата EXIF доступны в Интернет по адресу http://www.jeita.or.jp/.

В рамках лабораторной работы необходимо написать сценарий shell sortpics.sh, позволяющий выполнить сортировку JPEG-файлов по каталогам в соответствии с значением полей метаданных. JPEG-файлы идентифицируются расширениями *.jpg и *.jpeg (возможно, в верхнем регистре).Сценарий должен уметь сортировать файлы по дате снимка и модели камеры. Сценарий должен уметь выполнять рекурсивный обход каталога, содержащего исходные файлы изображений, не включать в результат файлы, размещенные в каталогах с указанным именем, создавать в каждом целевом каталоге подкаталог с эскизами — уменьшенными копиями изображений, приводить имена файлов к нижнему/верхнему регистру. Сценарий должен распознавать как короткие, так и длинные опции.

Для извлечения метаданных можно воспользоваться программой exiftags (/home/aborod/usr/local/bin/exiftags), справка доступна по команде man -m /home/aborod/usr/local/man exiftags. Для создания эскизов можно воспользоваться командами djpeg/cjpeg.

Перечень распознаваемых опций приведен в таблице. При обнаружении противоречащих и дублирующихся опций, поведение сценария не оговаривается (на Ваш выбор).

 #   Действие   Опция 
1 Корень дерева каталогов с подлежащими обработке изображениями. Это обязательный параметр, если он опущен, сценарий должен выводить короткую справку и завершать выполнение, если он задан, но не существует, или существует, но дерево каталогов содержит целевой каталог — диагностическое сообщение. -s путь
--source-root путь
2 Целевой каталог (в котором будут размещены обработанные файлы). Это обязательный параметр, если он опущен, сценарий должен выводить короткую справку и завершать выполнение, если он задан, но не существует, или существует, но дерево каталогов с исходными файлами содержит целевой каталог — диагностическое сообщение. -d путь
--dest-dir путь
3 Имя исключаемого каталога. Каталоги с этим именем при рекурсивном обходе не обрабатываются. Это необязательный параметр. -x имя
--exclude-dir имя
4 Тип сортировки. Если этот параметр имеет значение camera, то для каждой модели камеры в целевом каталоге создается подкаталог, в который помещаются снимки, сделанные этой камерой. Если этом параметр имеет значение date, то для каждой даты в целевом каталоге создается подкаталог с именем в формате гггг-мм-дд, в который помещаются снимки, сделанные в этот день. Это необязательный параметр, по умолчанию предполагается режим date. Если этот параметр имеет другое значение, выводится диагностическое сообщение и работа сценария прекращается. -t тип
--type тип
5 Признак создания эскизов. Эскиз — пропорционально уменьшенная копия изображения. Это необязательная опция, если она задана, эскизы создаются, иначе — нет. Эскизы помещаются в специальный подкаталог в каждом создаваемом каталоге. Имя каталога с эскизами жестко задается сценарием (на Ваш выбор). -c
--create-thumbs
6 Ограничение эскиза по ширине и высоте. Единицей измерения является пиксель. Размер эскиза вычисляется в соответствии с наиболее жестким ограничением с сохранением пропорций изображения. Если ограничения не заданы, используются ограничения по умолчанию, заданные сценарием (на Ваш выбор). Если в качестве ограничений используются недопустимые значения, сценарий должен завершать работу и выводить диагностическое сообщение. Если создание эскизов не включено, значения параметров (даже недопустимые) игнорируются. -w значение
--max-width значение
-h значение
--max-height значение
7 Приведение имен файлов к верхнему/нижнему регистру. Это необязательные опции, если они опущены, преобразование не выполняется. -l
--lower-case
-u
--upper-case
8 Развернутая справка по использованию. При обнаружении этой опции сценарий выводит справку и завершает выполнение независимо от остальных параметров командной строки. -h
--help

Критерии оценки работы

Оценивание задания осуществляется по следующей таблице, в которой каждое значение может быть умножено на поправочный вещественнозначный коэффициент в интервале [0; 1], отражающий степень самостоятельности выполнения задания. Всего за работу можно получить до 10 баллов

 #   Релизовано   Баллы 
1 Реализовано распознавание опций -d, -s, -t, -h и их длинных аналогов, выполняется сортировка файлов 0 - 2
2 Предусмотрена возможность появления файлов *.jpg и *.jpeg с проивольной комбинацией регистров символов расширения (например, *.JpG) 0 - 1
3 Реализован рекурсивный обход дерева каталогов исходных файлов 0 - 1
4 Реализовано исключение из обработки каталога, заданного с опцией -x 0 - 1
5 Реализовано создание эскизов с заданными сценарием ограничениями 0 - 1
6 Реализована обработка опций -w, -h и их длинных аналогов 0 - 2
7 Реализована обработка опций -l, -u и их длинных аналогов 0 - 1
8 Обрабатывается возможность появления файлов с одинаковыми именами (по крайней мере, вывод диагностических сообщений) 0 - 1

Возможные штрафы приведены в таблице. Всего можно получить до 10 штрафных баллов.

 #   Описание   Штраф 
1 Отсутствие заголовочного комментария, несоответствие заголовочного комментария общепринятым соглашениям 0 - 2
2 Отсутствие пояснительных комментариев, комментирование самоочевидных конструкций (дублирование кода, а не пояснение смысла) 0 - 2
3 Присутствует дополнительный вывод, не предусмотренный требованиями (например, диагностические сообщения shell и использованных команд) 0 - 1
4 Неверно устанавливается статус завершения сценария 0 - 1
5 Неструктурированный код, непоследовательность в стиле 0 - 2
6 Возможны (достаточно маловероятные) условия, при которых сценарий будет работать некорректно, не предусмотренные требованиями. 0 - 2

Итоговая оценка определяется суммой баллов. Работа, оцененная менее чем на 0 баллов не засчитывается.