Как в Mac OS X настроить очистку рабочего стола с помощью AppleScript


Порядок на рабочем столе приятен любому, но вот каждый ли пользователь регулярно проводит уборку? Многие просто ленятся перетаскивать мышью в корзину ненужные значки, даже ради того, чтобы получить удобную рабочую среду. Забудьте о технике перетаскивания мышью: лучше напишите сценарий на языке AppleScript, который выполнит за вас всю работу.Каждый пользователь имеет свой собственный, индивидуальный стиль работы. Некоторые из них сознательны и аккуратны, а потому помещают все свои документы в папку Documents, всю свою графику — в папку Pictures, а все видеофильмы и ролики — в папку Movies. Некоторые люди так не работают: они используют рабочий стол примерно так же, как вы использовали бы не виртуальный, а реальный рабочий стол — как временное хранилище для всего, с чем они работают в данные момент. У третьих же пользователей рабочий стол служит хранилищем для всего, на что они наткнутся в течение конкретного рабочего сеанса. Они не заботятся о том, чтобы убирать за собой до тех пор, пока рабочий стол не окажется захламленным до того, что на нем становится невозможно разместить что-либо еще. Некоторые люди называют таких людей неряхами, а другие — кричат о том, что «они позорят компьютерное сообщество».

Я, например, тоже довольно часто грешу тем, что спохватываюсь только тогда, когда мой рабочий стол оказывается невообразимо замусоренным. Я и такие, как я, не нуждаются ни в снисходительной жалости, ни в нравоучениях. Они нуждаются в помощи, и именно поэтому я и написал данный рецепт. Оказывается, файлы на рабочем столе имеют предсказуемые типы. Поскольку это так, их легко классифицировать, а это значит, что процесс очистки рабочего стола легко можно автоматизировать. Если вы — пользователь Mac, то слово «автоматизация» немедленно ассоциируется у вас с приложением Automator, и это вполне логичное предположение. Однако идеалом является как раз не Automator, а язык AppleScript. Написав сценарий AppleScript, мы с легкостью разместим все объекты по нужным папкам. Так, файлы формата MP3 отправятся в папку Music, документы — в папку Documents, видеофайлы — в папку Movies и т. д. Как выяснилось, это совсем не сложно.

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

Написание сценария

Чтобы начать работу с AppleScript, запустите редактор скриптов Script Editor, расположенный в папке /Applications/AppleScript/. Наш скрипт сам по себе очень прост. Он должен идентифицировать типы файлов по их расширениям и перемещать файлы каждого типа в соответствующую папку, выделенную для хранения файлов именно этого типа. Сам скрипт приведен в листинге 1.


1234567891011121314151617181920212223242526272829303132333435363738// Листинг 1. Сценарий AppleScript для автоматической очистки рабочего столаtell application «Finder»set theDesktop to alias «:Users:cks:Desktop:»— Where to put stuffset theMusic to alias «:Users:cks:Music:»set thePics to alias «:Users:cks:Pictures:»set theVideos to alias «:Users:cks:Movies:»set theDocs to alias «:Users:cks:Documents:»—filetype by extensionset musicExt to {«.mp3», «.aac»}set picsExt to {«.jpg», «.gif», «.tif», «.tiff», «.png»}set videosExt to {«.avi», «.mpg», «.mov», «.mp4»}set docsExt to {«.rtf», «.txt», «.doc»}set allFiles to files of myDesktoprepeat with theFile in allFilescopy name of theFile as string to FileNamerepeat with ext in musicExtif FileName ends with ext thenmove theFile to theMusicend ifend repeatrepeat with ext in picsExtif FileName ends with ext thenmove theFile to thePicsend ifend repeatrepeat with ext in docsExtif FileName ends with ext thenmove theFile to theDocsend ifend repeatrepeat with ext in videosExtif FileName ends with ext thenmove theFile to theVideosend ifend repeatend repeatend tell

Внимательное изучение текста этого скрипта необходимо, если вы желаете модифицировать его по своему вкусу. Фрагмент скрипта, приведенный в листинге 2, запускает приложение Finder и дает инструкцию выполнить поиск по рабочему столу пользователя, запустившего этот скрипт. В данном примере рабочий стол определен как :Users:cks:Desktop. Вы можете изменить папку, которую необходимо исследовать и очистить, изменив этот путь.

Например, вы можете поступить точно так же с вашей папкой Downloads. Для этого надо изменить путь на :Users:username:Downloads:. Обратите особое внимание на символы двоеточия (:). В AppleScript двоеточия заменяют символы наклонной черты (/), хорошо знакомые тем, кто много работает с командной строкой Terminal.

1234// Листинг 2. Фрагмент сценария, запускающий Finder и дающий указание// выполнить поиск по рабочему столуtell application «Finder»set theDesktop to alias «:Users:cks:Desktop:»

Следующая часть скрипта (листинг 3) определяет, в какую папку должны перемещаться файлы каждого конкретного типа. Вы можете адаптировать скрипт под свои нужны, указав пути к папкам для перемещения файлов. Например, предположим, что вы желаете, чтобы все музыкальные файлы с вашего рабочего стола перемещались в папку NewMusic, вложенную в вашу папку Music. Это делается за счет изменения пути к папке за счет добавления еще одного уровня вложенности: :Users:username:Music:NewMusic:.

123456// Листинг 3. Фрагмент сценария, указывающий пути к папкам для перемещения— Where to put stuffset theMusic to alias «:Users:cks:Music:»set thePics to alias «:Users:cks:Pictures:»set theVideos to alias «:Users:cks:Movies:»set theDocs to alias «:Users:cks:Documents:»

Следующий фрагмент сценария (листинг 4) определяет расширения имен файлов, характерные для каждого типа файлов. Если расширений, указанных в этом скрипте, вам недостаточно, вы можете добавлять в свой вариант дополнительные. Например, если вы хотите, чтобы файлы Photoshop классифицировались как картинки, вам достаточно просто добавить строку «.psd» в список расширений файлов, заключенный в фигурные скобки для строки set picsExt.

1234567// Листинг 4. Фрагмент сценария, определяющий расширения имен файлов,// характерные для файлов каждого типа—filetype by extensionset musicExt to {«.mp3», «.aac»}set picsExt to {«.jpg», «.gif», «.tif», «.tiff», «.png»}set videosExt to {«.avi», «.mpg», «.mov», «.mp4»}set docsExt to {«.rtf», «.txt», «.doc»}

Вся остальная часть скрипта осуществляет перемещение файлов и не требует модификаций, если только вы не захотите добавить новый класс файлов. Если вы хотите, чтобы это скрипт «отлавливал» и файлы приложений, перемещая их затем в вашу папку Applications, вы должны будете самостоятельно добавить нужный код в эту часть сценария. Если вы скопируете текст этого сценария и вставите его в окно Script Editor, он будет выглядеть примерно так, как показано на рис. 5.53.

Рис. 5.53. Не очень-то хорошо выглядит наш скрипт…
Рис. 5.53. Не очень-то хорошо выглядит наш скрипт…

Любой, кто имеет хоть минимальный опыт написания скриптов, сразу же скажет, почему этот скрипт выглядит как-то криво: потому что скрипты должны использовать систему цветового кодирования и отступы. Нажмите кнопку Compile (она помечена не только текстовой меткой, но и значком, изображающим молоток), Script Editor немного поработает, и очень скоро все примет нормальный вид (рис. 5.54). В качестве бонуса, Script Editor обнаружит структурные ошибки (например, незакрытые кавычки), если они есть, и предупредит вас об этом.

Рис. 5.54. Вот теперь скрипт приобрел вполне нормальный вид!
Рис. 5.54. Вот теперь скрипт приобрел вполне нормальный вид!

Если вы собираетесь применять этот скрипт лишь от случая к случаю, вы можете сохранить его в виде скрипта. Когда он вам понадобится, достаточно будет запустить Script Editor, нажать кнопку Run на инструментальной панели, и скрипт будет исполнен. Это замечательная возможность для тех, у кого рабочий стол не слишком часто оказывается захламленным до безобразия. Что касается настоящих нерях, вроде меня, то это — не самая удачная идея. Я хотел бы запускать этот скрипт, прилагая минимум усилий и без лишней суеты. Поэтом я сохранил его в виде приложения, выбрав из раскрывающегося списка File Format опцию Application bundle (рис. 5.55).

Рис. 5.55. Создание нового приложения с помощью AppleScript
Рис. 5.55. Создание нового приложения с помощью AppleScript

Данный скрипт работает рекурсивно, т. е. все папки (но не диски), помещенные на ваш рабочий стол, также будут отсортированы. Применять этот скрипт лучше всего в тех случаях, когда ваш рабочий стол захламлен именно файлами, а не папками.

Если вы хотите модифицировать этот скрипт для того, чтобы он перемещал файлы другого типа, например, приложения, то, как уже говорилось ранее, он потребует дополнительной модификации. Рассмотрим, каким образом этого можно добиться. В разделе — Where to put stuff нужно добавить следующую строку:

1set theapplications to alias «:Users:cks:Applications:»

В разделе — Filetype by extension необходимо добавить следующую строку

1set applicationsExt to {«.app»}

И, наконец, в основном цикле repeat необходимо добавить код, показанный в листинге 5.

1234567// Листинг . Код, который необходимо добавить в текст скрипта// (см. листинг 3), чтобы он перемещал приложенияrepeat with ext in applicationsExtif FileName ends with ext thenmove theFile to theApplicationsend ifend repeat