Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Результаты
Листинг 14.8.Запуск сценария thumbnails
$ thumbnails
Usage: thumbnails (-e|-f) thumbnail-size image [image] [image]
-e··resize to exact dimensions, ignoring original proportions
-f··fit image into specified dimensions, retaining proportion
-s··strip EXIF information (make ready for web use)
····please use WIDTHxHEIGHT for requested size (e.g., 100x100)
$ thumbnails −s — e 300x300 hawaii.png
Creating 300x300 (exact size) thumb for file hawaii.png
$ thumbnails −f 300x300 hawaii.png
Creating 300x300 (max size) thumb for file hawaii.png
$
Усовершенствование сценария
Отличным дополнением для этого сценария стала бы возможность создавать наборы миниатюр указанных размеров, например 100 × 100, 500 × 500 и 1024 × 768 (типичный размер обоев для рабочего стола), одним вызовом сценария. С другой стороны, эту задачу, пожалуй, лучше реализовать в другом сценарии.
№ 98. Интерпретация информации геопозиционирования GPS
Большинство фотографий в наши дни делается с помощью сотовых телефонов или других цифровых устройств, способных определять широту и долготу своего местонахождения. Конечно, это создает некоторые проблемы с сохранением тайны частной жизни, но возможность узнать, где была сделана фотография, представляет определенный интерес. К сожалению, даже при том, что утилита identify из пакета ImageMagick позволяет извлекать информацию GPS, формат, в каком она представляет данные, очень сложно читать:
exif: GPSLatitude: 40/1, 4/1, 1983/100
exif: GPSLatitudeRef: N
exif: GPSLongitude: 105/1, 12/1, 342/100
exif: GPSLongitudeRef: W
Координаты выводятся в градусах, минутах и секундах — что естественно, — но сам формат представления не понятен на первый взгляд, как, например, формат, принимаемый сайтами Google Maps или Bing Maps:
40 4' 19.83" N, 105 12’ 3.42" W
Сценарий преобразует информацию EXIF в этот формат, благодаря чему вы сможете скопировать данные и вставить их непосредственно в программу отображения карт. В ходе преобразования сценарий решает несколько элементарных уравнений (обратите внимание, что значение секунд широты, в действительности равное 19,83, инструментом identify возвращается в виде 1983/100).
Код
Понятие широты и долготы появилось намного раньше, чем вы могли бы подумать. В действительности впервые линии, обозначающие широту, появились еще в 1504 году на картах португальского картографа Педру Рейнел (Pedro Reinel). В вычислениях используются также некоторые математические формулы. К счастью, нам не придется обрабатывать их. Нам достаточно знать, как преобразовать широту и долготу из значений в формате EXIF в традиционные, понятные современным программам отображения карт, как можно увидеть в листинге 14.9. Этот сценарий также использует сценарий № 8, echon, из главы 1.
Листинг 14.9.Сценарий geoloc
#!/bin/bash
# geoloc — для изображений, включающих информацию GPS, преобразует эти
#·· данные в строку, которую можно ввести в Google Maps или Bing Maps.
tempfile="/tmp/geoloc.$$"
trap "$(which rm) −f $tempfile" 0 1 15
if [$# −eq 0]; then
··echo "Usage: $(basename $0) image" >&2
··exit 1
fi
for filename
do
··identify −format
"%[EXIF:*]" "$filename" | grep GPSL > $tempfile
··latdeg=$(head -1 $tempfile | cut −f— f1 | cut −d= −f2)
··latdeg=$(scriptbc −p 0 $latdeg)
··latmin=$(head -1 $tempfile | cut −d, −f2)
··latmin=$(scriptbc −p 0 $latmin)
··latsec=$(head -1 $tempfile | cut −d, −f3)
··latsec=$(scriptbc $latsec)
··latorientation=$(sed −n '2p' $tempfile | cut −d= −f2)
··longdeg=$(sed −n '3p' $tempfile | cut −d, −f1 | cut −d= −f2)
··longdeg=$(scriptbc −p 0 $longdeg)
··longmin=$(sed −n '3p' $tempfile | cut −d, −f2)
··longmin=$(scriptbc −p 0 $longmin)
··longsec=$(sed −n '3p' $tempfile | cut −d, −f3)
··longsec=$(scriptbc $longsec)
··longorientation=$(sed −n '4p' $tempfile | cut −d= −f2)
··echon "Coords: $latdeg ${latmin}' ${latsec}\" $latorientation, "
··echo "$longdeg ${longmin}' ${longsec}\" $longorientation"
done
exit 0
Как это работает
Каждый раз, исследуя приемы использования пакета ImageMagick, мы находим другие параметры и другие способы применения его возможностей. В данном случае аргумент −format извлекает из EXIF изображения только один определенный параметр.
Обратите внимание, что здесь роль шаблона в команде grep играет строка GPSL, а не GPS. Благодаря этому отфильтровывается вся дополнительная информация, связанная с GPS, которая нам не нужна. Попробуйте убрать символ L, и вы увидите, как много других сведений из блока с EXIF-данными будет выведено на экран!
Затем остается только извлечь конкретные поля и решить несколько уравнений с помощью scriptbc, чтобы преобразовать данные в более понятный формат, как можно видеть в строках latdeg .
Суть использования конвейера с несколькими командами cut должна быть вам уже знакома. Это чрезвычайно удобный для сценариев инструмент!
После извлечения всех данных и решения всех уравнений необходимо вновь собрать информацию в виде, совместимом со стандартной формой записи широты и долготы . Вот и все!
Запуск сценария
Передайте сценарию файл изображения, и, если он включает информацию о широте и долготе, сценарий преобразует ее в формат, понятный Google Maps, Bing Maps и другим программам для отображения карт, как показано в листинге 14.10.
Результаты
Листинг 14.10.Запуск сценария geoloc
$ geoloc parking-lot-with-geotags.jpg
Coords: 40 3' 19.73" N, 103 12' 3.72" W
$
Усовершенствование сценария
Что получится, если передать сценарию фотографию, в которой отсутствует информация EXIF? Сценарий должен обрабатывать эту ситуацию, а не просто выводить уродливое сообщение об ошибке, полученное от программы bc, потерпевшей неудачу, или пустые координаты. Вы согласны? Дополнительные проверки информации GPS с координатами, извлекаемой с помощью ImageMagick, были бы полезным дополнением.
Глава 15. Дни и даты
Вычисления с датами порой бывают очень запутанными, например, когда нужно выяснить, високосный ли указанный год, сколько дней осталось до Нового года или сколько дней вы прожили. В этой области между Unix-системами, такими как OS X, и системами Linux, с их инструментами GNU, лежит глубокая пропасть. Дэвид Маккензи (David MacKenzie), взявший на себя труд переписать утилиту date для GNU-версии Linux, значительно расширил ее возможности.
Если вы пользуетесь OS X или другой системой, где команда date −version выводит сообщение об ошибке, загрузите комплект основных утилит, в состав которого входит расширенная утилита GNU date (иногда устанавливается как gdate). В OS X это можно выполнить с помощью диспетчера пакетов (не установлен по умолчанию, но установить его легко):
Читать дальшеИнтервал:
Закладка: