Уроки Automator. Часть 4: Работа с действиями папок

automator_nowm

В очередной статье нашего цикла об Automator мы подробно расскажем о том, как работать с папками. В конце наших стараний у нас должен получиться сценарий, который позволяет автоматически разбирать папку «Загрузки», чистя её и автоматически раскидывая файлы по их местам. Для этого мы воспользуемся уже изученными нами ранее средствами, а также узнаем кое-что новое, в том числе и о самой операционной системе Mac OS X.

Часть первая, графическая

Для начала мы запустим Automator и выберем уже в этот раз «Действие папки».

Снимок экрана 2013-08-30 в 23.30.28

После этого мы в верхней части выберем ту папку, к которой мы бы хотели привязать наш сценарий. Для этого пройдём через всем нам знакомый диалог выбора файлов и папок в Mac OS.

Снимок экрана 2013-08-30 в 23.30.47

Данная процедура позволит Automator самому ассоциировать наш сценарий с выбранной папкой, нам не понадобится самим что-либо настраивать, а всего лишь нужно будет нажимать Cmd+S, когда мы захотим, чтобы наши результат сохранился, и появилась возможность попробовать его в деле.

После этого мы воспользуемся вот таким инструментом, который позволит выбрать из загрузок наши изображения:

Снимок экрана 2013-08-30 в 23.31.11

На этом этапе не требуется писать каких-либо сценариев, Automator предоставляет простые и удобные компоненты для того, чтобы мы могли указать тип файлов, которые мы хотим получить, а какие — отфильтровать. Укажем это и перейдём дальше.

Теперь мы хотим, чтобы найденные изображения перемещались в соответствующую им папку.

Снимок экрана 2013-08-30 в 23.32.54

На этом этапе мы можем проверить функциональность нашего простого сценария. Для этого сохраним его:

Снимок экрана 2013-08-30 в 23.33.01

После чего мы можем проверить, что всё в порядке, и сценарий попал куда нужно, а также оказался активным, для этого воспользуемся Finder’ом. Откроем нашу домашнюю директорию, где будут видны все папки, в том числе «Изображения» и «Загрузки». Дальше перейдём в пункт, где отображаются все действия, которые ассоциированы с нашими загрузками.

Снимок экрана 2013-08-30 в 23.33.37

Дальше система предложит нам выбрать некоторые действия, которые уже есть здесь.

Снимок экрана 2013-08-30 в 23.33.43

Здесь видно в том числе и наше, в самом низу, однако видно, что есть ещё целая куча других, которые мы также можем добавить или изменить. А пока просто нажмём «Отмена».

Снимок экрана 2013-08-30 в 23.33.54

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

Для того, чтобы попробовать в действии наш сценарий, просто переместим какую-нибудь фотографию или изображение в папку с загрузками. Пройдёт одна-две секунды, после чего файл окажется там, где ему и место — в папке с изображениями. Стоит отметить, что это будет работать только тогда, когда мы положим фотографию именно в «Загрузки», не допуская никакой вложенности. Если мы загрузим откуда-то целую папку с изображениями, ничего не будет происходить. Нам нужно будет доставать их вручную, что крайне неудобно. Мы же не для этого взялись за автоматизацию, чтобы делать такую скучную работу руками? Поэтому смотрим скриншот:

Снимок экрана 2013-08-30 в 23.41.41

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

После этого у читателей может возникнуть вопрос: «Как же быть с пустыми папками, которые остались после наших перемещений?». Ответу на него посвящена самая сложная часть статьи. В ней нам придётся работать с написанным вручную сценарием. Мы уже делали это раньше, поэтому те, кому интересно более полное решение нашей задачи, обязательно должны попробовать дойти до конца статьи и узнать о ещё некоторых хитростях.

Часть вторая, текстовая

Снимок экрана 2013-08-31 в 0.17.44

Мы воспользуемся известным нам компонентом для того, чтобы запустить наш сценарий. Разноцветный текст говорит о том, что была произведена компиляция и всё прошло успешно. Те, кто забыл этот нюанс, могут прочитать об этом в предыдущей статье нашего цикла. Не стоит переписывать вручную этот текст, тем более, что он тут не виден полностью. Мы приведём его ниже:

[php]set folderToClean to (path to downloads folder as text)
tell application «System Events» set emptyFolders to path of folders of folder folderToClean whose (disk items whose visible is true) = {}
end tell
tell application «Finder»
delete emptyFolders
end tell[/php]

Данный фрагмент необходимо поместить так, как показано на скриншоте выше, после строчки с «run…», как мы и говорили в третьей статье цикла.

Теперь пройдёмся по строчкам. Первая нужна нам для того, чтобы определить, какую же папку мы чистим. Для это назовём её понятным именем на английском языке, после чего в скобках напишем, чем же она является. Для этого воспользуемся возможностью языка AppleScript. С помощью переводчика можно понять, что мы говорим, что наша переменная folderToClean будет содержать путь к папке загрузок. При этом мы скажем, что хотим сделать её строчкой.

Дальше, между tell и end tell мы помещаем блок, который не позволит нам удалить лишнее, в том числе служебные папки. Для этого мы воспользуемся уже известной нам конструкцией для объявления переменной. Мы объявим то, что же мы хотим назвать папками, которые удаляем. Для этого мы обратимся к компоненту Mac OS X, который позволяет это делать — «System Events». С помощью словаря снова можно понять, что мы хотим, чтобы папки к удалению были теми, которые содержаться в нашей папке с загрузками, которую мы определили выше, а также такими, которые видимы (то есть не служебные) и пусты. Для этого мы в этой строчке мы описываем этот факт, обращаясь к компонентам языка. Мы говорим по очереди те условия, которыми должна обладать наша переменная. Мы хотим, чтобы параметр видимости был истинным, то есть сценарий не удалит ничего скрытого и системного, а ещё нам важен тот факт, что в этой папке нет никаких элементов, она — пуста.

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

Заключение

В этом уроке мы рассмотрели создание очень полезного инструмента, который может быть расширен или видоизменён так, чтобы он пригодился в решении других задач по работе с файлами. Читателям предлагается на основе этого урока самим сделать себе сценарий, который мог бы автоматически добавлять новые песни в iTunes. Для этого в «Музыке» можно найти директорию самого iTunes, где есть специальная папка для того, чтобы автоматически подхватывать музыку и раскладывать её в коллекции. Для этого может потребоваться активация этой опции в iTunes, если она была выключена. Подобного рода действия могут применяться и как самостоятельные программы, вызываемые пользователем, а могут вызываться системой, когда мы помещаем файлы сами или скачиваем их откуда-то.