Проблема этого кода в сценарии на языке командной оболочки в том, что каждый раз, когда сценарий ссылается на звездочку, она замещается списком всех имен файлов, соответствующих шаблонным символам, а значит, он выведет не последовательность символов *.jpg , но имена всех файлов .jpg в текущем каталоге. Именно поэтому сценарий временно запрещает автоматическую подстановку имен файлов
, способность командной оболочки выполнять подстановку имен файлов вместо шаблонных символов.
Однако если автоматическую подстановку выключить для всего сценария, программа display сообщит, что не может найти файл изображения с именем *.jpg . А это плохо.
Передайте сценарию каталог с одним или несколькими файлами изображений, в идеале — фотоархив из облачной системы хранения данных, например OneDrive или Dropbox, как показано в листинге 13.7.
Листинг 13.7.Запуск сценария slideshow для отображения изображений из облачного архива
$ slideshow ~/SkyDrive/Pictures/
Displaying 2252 images from ~/Skydrive/Pictures/ with suffixes *.gif *.jpg *.png
После запуска сценария на экране должно появиться новое окно, в котором, сменяя друг друга, будут появляться сохраненные и синхронизированные изображения. Прекрасный сценарий для совместного просмотра всех замечательных фотографий, которые вы сделали в отпуске!
Усовершенствование сценария
В этот сценарий много чего можно было бы добавить, чтобы сделать его более элегантным, например, позволить пользователям самим указывать параметры, которые в настоящее время зашиты в вызов display (такие, как размеры изображений). В частности, вы можете разрешить использовать разные устройства отображения, чтобы выводить изображение на втором экране, или менять скорость смены изображений.
№ 92. Синхронизация файлов с Google Drive
Google Drive — еще одна популярная облачная система хранения данных. В сочетании с комплектом офисных утилит Google, она служит шлюзом к целой системе редактирования и публикации, что делает ее особенно интересной в роли инструмента синхронизации. Скопируйте файл в формате Microsoft Word на свое устройство Google Drive, и вы сможете править его в любом веб-браузере, на любом компьютере. То же относится к презентациям, электронным таблицам и даже фотографиям. Чертовски удобно!
Следует, однако, отметить, что Google Drive хранит в вашей локальной системе не сами файлы документов, а только ссылки на документы в облаке. Например:
$ cat M3\ Speaker\ Proposals\ \(voting\). gsheet
{"url": "https://docs.google.com/spreadsheet/ccc?key=0Atax7Q4SMjEzdGdxYVVzdXRQ
WVpBUFh1dFpiYlpZS3c&usp=docslist_api", "resource_id": "spreadsheet:0Atax7Q4SMj
EzdGdxYVVzdXRQWVpBUFh1dFpiYlpZS3c"}
Определенно, перед нами не содержимое электронной таблицы.
Немного поиграв с командой curl, вы, возможно, сумели бы написать утилиту для анализа этой метаинформации, но давайте сосредоточимся на чем-нибудь попроще, а именно, напишем сценарий, с помощью которого вы сможете выбирать файлы и копировать их в свою учетную запись Google Drive, как показано в листинге 13.8.
Листинг 13.8.Сценарий syncgdrive
··#!/bin/bash
··# syncgdrive — позволяет указать один или несколько файлов, чтобы
··#·· автоматически скопировать их в вашу папку Google Drive, которая
··#·· синхронизируется с вашей учетной записью в облаке.
··gdrive="$HOME/Google Drive"
··gsync="$gdrive/gsync"
··gapp="Google Drive.app"
··if [$# −eq 0]; then
····echo "Usage: $(basename $0) [file or files to sync]" >&2
····exit 1
··fi
··# Проверить, запущен ли Google Drive? Если нет, запустить.
··if [-z "$(ps −ef | grep "$gapp" | g −v— v grep)"]; then
····echo "Starting up Google Drive daemon…"
····open −a "$gapp"
··fi
··# Теперь проверить наличие папки /gsync.
··if [! -d "$gsync"]; then
····mkdir "$gsync"
····if [$? -ne 0]; then
······echo "$(basename $0): Failed trying to mkdir $gsync" >&2
······exit 1
····fi
··fi
··for name····# Цикл по аргументам сценария.
··do
····echo "Copying file $name to your Google Drive"
····cp −a "$name" "$gdrive/gsync/"
··done
··exit 0
Подобно сценарию № 89 в начале главы, этот сценарий перед копированием файла или файлов в папку Google Drive проверяет, выполняется ли демон службы. Проверку выполняет блок, начинающийся в строке
.
Читать дальше