С помощью встроенных средств OS X.
Продолжаем осваивать замечательное приложение Automator. Это уже четвертая статья цикла. А вот три предыдущие:
- Создаем «волшебные» папки в OS X для автоматической обработки картинок
- Три быстрых трюка для автоматизации работы с PDF в OS X
- 4 полезных инструкции по работе с Finder
Эти материалы были «на разогрев», а теперь мы плавно приступаем к познанию истинной мощи Automator.
Чтобы делать реально полезные автоматизации, а не изобретать велосипеды наподобие скрипта для склевания pdf, бывает необходимо использовать внешние файлы с данными: адресные книги, таблицы с информацией о товарах, списки ссылок для парсинга и т. п.
Удобно хранить такую информацию в обычной реляционной базе данных и считывать оттуда SQL-запросами. В этом материале мы научимся делать это с помощью Automator.
Перед тем как использовать базу данных в автоматизирующих скриптах, ее надо где-то достать. Обычно, в подобных статьях прилагается файл с готовой базой для скачивания. Но я пойду другим путем и воспользуюсь случаем, чтобы рассказать об одной очень интересной фиче OS X.
Знали ли вы, что на маках есть возможность создавать базы данных SQLlite и делать к ним запросы из командной строки, без установки дополнительных программ?
Инструкция. Создаем базу данных SQLlite
1. Запускаем Программы -> Утилиты -> Терминал:
2. Создаем и открываем новую базу данных. Набираем:
sqllite3 my_contacts
Нажимаем Enter:
3. Создаем новую таблицу. Набираем:
create table problem_clients(first name text, surname text, email text);
Нажимаем Enter:
4. Добавляем в таблицу записи. Набираем:
insert into problem_clients values(“Иван”,”Иванов”,”[email protected]”),(“Петр”,”Петров”,”[email protected]”),(“Сидор”,”Сидорович”,”[email protected]”),(“Денис”,”Денисов”,”[email protected]”);
Нажимаем Enter:
5. Просматриваем записи в таблице. Набираем:
select * from problem_clients;
Нажимаем Enter:
Готовый файл с базой данных хранится в корневом каталоге активного пользователя:
Его мы будем использовать для нашей автоматизации.
А теперь с помощью Automator создадим программу, которая будет считывать из базы адреса проблемных клиентов и отправлять их на нужный адрес электронной почты.
Пример очень упрощенный и надуманный, но после ознакомления с ним легко понять, каким образом Automator взаимодействует с базами данных.
Это понимание поможет вам организовать использование БД в собственных автоматизациях.
Инструкция. Как в Automator использовать данные из базы SQLlite
1. Открываем Программы->Automator и выбираем пункт меню Файл->Новый:
2. Перетаскиваем на основное поле действие Получить указанные объекты Finder:
3. Нажимаем на кнопку Добавить и выбираем файл с нашей базой:
4. Перетаскиваем на основное поле действие Выполнить SQL и вводим SQL-запрос для выбора email-адресов из базы:
select email from problem_clients;
5. Перетаскиваем на основное поле действие Получить значение переменной и в поле для указания имени переменной набираем mail_body (вы можете выбрать другое имя):
6. Перетаскиваем на основное поле действие Новое сообщение Почты. Указываем адрес получателя и тему письма:
7. Перетаскиваем на основное поле действие Отправка исходящих сообщений:
8. Запускаем скрипт и проверяем, отправилось ли письмо:
Для начала достаточно этой простой инструкции. К теме использования баз данных для автоматизаций мы еще не раз вернемся, когда будем говорить о написании скриптов для OS X на JavaScript, Apple Script и Shell Script.
Приложение. Отвечаем на вопросы читателей
В комментариях к прошлой статье об Automator читатели задали два очень интересных и актуальных вопроса, ответы на которые будут интересны не только им. Поэтому расскажем об их решение в завершение статьи:
К сожалению, дату создания файла скриптами не поправишь (в справочнике это свойство описано как read only). А вот дату изменения можно ставить какую угодно. Предполагаю, что дату создания Вам нужно знать для фильтрации и сортировки картинок в поиске. И Вы с тем же успехом сможете использовать для этого дату изменения.
Вот один из вариантов решения проблемы:
1. Открываем Программы->Утилиты->Редактор скриптов. Выбираем язык JavaScript (по умолчанию выбран Apple Script).
И вставляем следующий код:
[jscript]
Finder = Application("Finder");
fileArray = new Array();
// Здесь должен быть путь к папке с фотографиями
fileArray = Finder.startupDisk.folders.byName("Users").folders.byName("irina").folders.byName("cards").documentFiles;
// Перебираем все фотографии
for(i=0;i<=fileArray.length-1;i++)
{
// Записываем дату создания в комментарий
fileArray[i].comment = String(fileArray[i].creationDate());
}
[/jscript]
Запускаем скрипт и проверяем результат:
УРА! Теперь дата создания записана в комментарий.
После этого можно скопировать фотографии в новое место хранения и запустить код для приписывания файлам нужных дат изменения:
[jscript]
Finder = Application("Finder");
fileArray = new Array();
// Здесь должен быть новый путь к папке с фотографиями
fileArray = Finder.startupDisk.folders.byName("Users").folders.byName("irina").folders.byName("new_cards").documentFiles;
// Перебираем все фотографии
for(i=0;i<=fileArray.length-1;i++)
{
// Ставим нужную дату изменения из комментария
fileArray[i].modificationDate=new Date(fileArray[i].comment());
}
[/jscript]
А вот вопрос от одного из авторов iPhones.ru:
Артем, у твоей задачи тоже есть решение на JavaScript.
Вот небольшая программка перебирает каждый файл в выбранной папке и проверяет, не влезет ли он на диск. И если место для него есть, то перемещает файл:
1. Открываем Программы->Утилиты->Редактор скриптов. Выбираем язык JavaScript (по умолчанию выбран Apple Script).
И вставляем следующий код:
[jscript]
Finder = Application("Finder");
// Надо будет посмотреть через консоль какой id у флешки твоей и заменить. 0 – это Macintosh HD
fleshka=Finder.disks[0];
myFilms = new Array();
// Тут надо адрес папки с фильмами записать
myFilms=Finder.startupDisk.folders.byName("Users").folders.byName("irina").folders.byName("new_cards").documentFiles();
// Массив считается с единицы, так как 0 – DS_Store)
for(i=1;i<=myFilms.length-1;i++)
{
if(fleshka.freeSpace()>myFilms[i].size())
{
Finder.move(lastFilm, {to: fleshka});
// Обновляем массив, чтобы цикл не проходил по несуществующим элементам
myFilms=Finder.startupDisk.folders.byName("Users").folders.byName("irina").folders.byName("new_cards").documentFiles();
}
}
[/jscript]
Вот и все на сегодня. Продолжение следует. Если у вас есть какие-то задачи в OS X, которые вы хотите автоматизировать, пишите о них в комментариях, пожалуйста.
19 комментариев
Форум →Спасибо! Буду пробовать.
@Артём Суровцев, будут вопросы ты знаешь куда писать)
@Ирина Чернова, честно сказать не знаю…
@dennis1, 12 картинка сверху не считая заголовка.
Хороший способ, но навертели с этими вещами, что вот не понятно откуда должен узнать что отельные файлы обрабатываются по-особому и для них есть особый редактор. Непанятна!
@MatveyYo, спасибо за наводку…Ира..Ира уже бегу…)))
@MatveyYo, что вы имеете ввиду под отдельными файлами?
@Ирина Чернова, csv файлам тоже можно делать запрос.
Ирина! Спасибо огромное! Очень интересно ! Буду с нетерпением ждать новых статей!
@Александр Бельцов, рада, что Вам понравилось)
@Ирина Чернова, почему JavaScript выбран, а не AppleScript?
P.S. Спасибо за интересный материал.
@AnVS, вот тут в конце статьи ответ на Ваш вопрос https://www.iphones.ru/iNotes/541344
Отлично. Из прошлой статьи я замутил скрипт для слияния пдф в один файл, прикольно!
@pupzem, очень рада что вы нашли что-то полезное для себя)
Я прямо чувствую МОЩЬ)) @Ирина Чернова, спасибо, продолжайте издавать статьи!
И под шумок, стоит парой задача транслитерировать названия выделенных файлов (скопом), наверняка можно запилить службу на автоматоре, чтобы потом просто выделить несколько файликов правой кнопкой нажать и в транслит их имена махом? ;)
Подскажите пожалуйста, есть ли возможность забиндить сочетание клавишь для быстрой блокировки мака?
Ирина, чтобы сделать скриншот конкретного окна:
1. CMD+Shift+4
2. Включится режим вырезания скриншота
3. Нажатием “Пробела” в этот момент вы переключите комп в режим скриншота окна
И скрины так получаются красивые, с тенью и прозрачным фоном)
@Цугур, Это не спортивно, надо скриптом!
Здравствуйте! Подскажите, пожалуйста, есть какой нибудь адекватный скрипт для экпорта фотографий из приложения Фото на mac, следующим образом:
при выборе “моментов” запустить скрипт, который каждую фотографию переименовывал в “название момента”_ХХ, и сохранял их в отдельную папку с названием момента с сохранением всей информации о фотографии.
В настоящее время экпорт в Фото работать в таком режиме не может. Цель сего действия сделать адекватную картотеку для просмотра на ОС Windows.
Спасибо большое, Ирина! Ваш ответ не завставил себя долго ждать ;) попробую, как будет время
ps вопрос из предыдущего комментария из моей же серии. Интересно
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Как на iPhone защитить приватные вкладки браузера при помощи Face ID или Touch ID
Как на iPhone скрыть уведомления от приложения Быстрые команды
Почему быстрый просмотр на Mac не запускает фильмы и ролики
Как в MacBook с процессором M1/M2 переназначить кнопку F4 со Spotlight на LaunchPad
Пропала строка состояния на iPhone, как вернуть
Настраиваем автозамену текста в определенном приложении на iPhone или iPad
Как правильно заряжать iPhone?
Как в iOS 16 включить предварительный просмотр ссылок в Почте