Цель работы
Изучить механизм разбора параметров с использованием команды 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 баллов не засчитывается.