Выбрать главу

fi

exit 0

Как это работает

Ключевую роль в этом сценарии играют две строки со значками и . Первая вызывает команду ps и затем использует последовательность команд grep, чтобы отыскать требуемое приложение — Dropbox.app — и одновременно исключить из результатов саму команду grep. Если получится непустая строка, значит, Dropbox действует в режиме демона (демоном называется программа, которая предназначена для работы в фоновом режиме, 24 часа в сутки, 7 дней в неделю, и решает те или иные задачи, не требуя вмешательства пользователя), и на этом все.

Если программа Dropbox.app не запущена, сценарий вызывает команду open в OS X, которая сама отыщет приложение и запустит его.

Запуск сценария

Если сценарий вызывается с флагом −s, он ничего не выводит. Но по умолчанию выводится информация о состоянии программы, как показано в листинге 13.2.

Результаты

Листинг 13.2. Вызов сценария startdropbox для запуска Dropbox.app

$ startdropbox

Launching Dropbox.app

$ startdropbox

Dropbox.app is running with PID 22270

Усовершенствование сценария

В этом сценарии мало что можно усовершенствовать, но, если вы пожелаете перенести его в систему Linux, не забудьте установить официальные пакеты Dropbox с веб-сайта проекта. Запустить Dropbox (после правильной настройки) можно командой startdropbox.

№ 90. Синхронизация с Dropbox

Не составляет труда написать сценарий, синхронизирующий папку или набор файлов с облачной системой, такой как Dropbox. Система сама заботится о синхронизации содержимого локального каталога Dropbox с копией в облаке, обычно эмулируя локальный жесткий диск в системе.

Сценарий в листинге 13.3, syncdropbox, пользуется этим обстоятельством и позволяет легко и просто скопировать каталог с файлами или заданный набор файлов во вселенную Dropbox. В первом случае копируются все файлы в каталоге; во втором — файлы из заданного списка сбрасываются в папку sync в Dropbox.

Код

Листинг 13.3. Сценарий syncdropbox

#!/bin/bash

# syncdropbox — синхронизирует заданный набор файлов или указанную

#·· папку с хранилищем Dropbox. Это достигается путем копирования

#·· папки в ~/Dropbox или набора файлов в папку sync в Dropbox с последующим

#·· запуском Dropbox.app, если это необходимо.

name="syncdropbox"

dropbox="$HOME/Dropbox"

sourcedir=""

targetdir="sync" # Целевая папка в Dropbox для отдельных файлов.

# Проверить начальные аргументы.

if [$# −eq 0]; then

··echo "Usage: $0 [-d source-folder] {file, file, file}" >&2

··exit 1

fi

if ["$1" = "-d"]; then

··sourcedir="$2"

··shift; shift

fi

# Проверка допустимости.

if [! -z "$sourcedir" −a $# −ne 0]; then

··echo "$name: You can't specify both a directory and specific files." >&2

··exit 1

fi

if [! -z "$sourcedir"]; then

··if [! -d "$sourcedir"]; then

····echo "$name: Please specify a source directory with −d." >&2

····exit 1

··fi

fi

#######################

#### ГЛАВНЫЙ БЛОК

#######################

if [! -z "$sourcedir"]; then

··if [-f "$dropbox/$sourcedir" −o — d "$dropbox/$sourcedir"]; then

····echo "$name: Specified source directory $sourcedir already exists." >&2

····exit 1

··fi

··echo "Copying contents of $sourcedir to $dropbox…"

··# −a обеспечивает рекурсивное копирование с сохранением

··#·· информации о владельце и пр.

··cp −a "$sourcedir" $dropbox

else

··# Исходный каталог отсутствует, поэтому переходим к отдельным файлам.

··if [! -d "$dropbox/$targetdir"]; then

····mkdir "$dropbox/$targetdir"

····if [$? -ne 0]; then

······echo "$name: Error encountered during mkdir $dropbox/$targetdir." >&2

······exit 1

····fi

··fi

··# Все готово! Скопировать указанные файлы.

··cp −p — v "$@" "$dropbox/$targetdir"

fi

# Теперь запустить приложение Dropbox, если необходимо, чтобы выполнить

#·· фактическую синхронизацию.

exec startdropbox −s

Как это работает

Большая часть листинга выполняет проверку на наличие ошибок, что очень утомительно, но необходимо, чтобы гарантировать правильную работу сценария и ничего не испортить. (Никто не хочет потерять свои данные!)