Продолжаем рассматривать примеры использования Automator в повседневной жизни.
В первой статье в комментариях был задан вопрос: как сделать автоматической переименование файлов на основании имени папки.
Попробуем решить данную задачу максимально красиво.
Задача
Произвести автоматическое переименование файлов в папке, проигнорировав предыдущее имя. В качестве нового имени использовать название папки и инкрементальный индекс.
Для решения задачи потребуются следующие компоненты:
- Установить значение переменной
- Получить значение переменной
- Запустить shell-скрипт
- Получить содержимое папок
- Переименовать объекты Finder
Я помню, что обещал не лезть в дебри скриптования – к сожалению, без этого задачу решить не получится. Но команда будет короткой, а я подробно объясню, что она делает и как работает.
Начинаем как всегда, с создания нового автомат — Действие папки. Затем добавляем компоненты, для упрощения, вставляю их прямые названия без склонений.
- Установить значение переменной. Указываем имя Путь к папке.
- Запустить Shell-скрипт. В нем пишем:
echo ${1##*/}
и не забываем проставить опцию: Передать ввод → как аргументы - Установить значение переменной. Создаем новую переменную Имя папки, которой будет присвоен результат работы из п.2
- ВНИМАНИЕ Получить значение переменной, в этом пункте обязательно выставляем параметр: Игнорировать входные данные этого действия.
- Получить содержимое папок
- Переименовать объекты Finder. Так как нам не требуется сохранять прошлое имя и цель стоит в построение последовательности имен, то выбираем пункт: Сделать последовательным. После чего получим интерфейс, где требуется указать новое имя, в него подставляем нашу переменную Имя папки, а дальше все интуитивно понятно.
Теория
Теперь пройдем по неявным местам. Сделаем это в формате вопрос/ответ.
Q. Зачем усложнять и делать две разных переменных, да еще и обрабатывать первую скриптом.
A. Если попробовать использовать переменную Путь к папке, то система её возвращает не просто как имя, например Кафе, а в виде полного пути /Users/iPhones/Desktop/Кафе, что не очень подходит в качестве имени для файлов. Но и это еще не все, при непосредственном переименовании происходит трансляция данного пути во внутренний формат операционной системы, итоговое имя примет вид: $(B1421039-E0DA–4111-A00D-DF47E1ADF07)_01.jpg.Поэтому мы вынуждены использовать вторую переменную и скрипт.
Q. Что за команда echo ${1##*/}
A. Команда echo – обозначает вывод значения на экран, в нашем случае оно сразу попадает в переменную. Если бы мы написали:
echo $1
то в переменную записался бы полный путь, полученный ранее, но нам требовалось получить имя папки. Для этого мы использовали модификаторы, позволяющие работать с переменными.
Конкретно, двойной ##, — удаляющий самую длинную часть строки, предшествующую шаблону. А шаблоном в нашем случае выступает чаcть */, обозначающая любые символы, в любом количестве, перед символом косой черты.
Примеры:
$A = /User/iPhones/Desktop/Кафе
Обозначаем переменную, в нашем случае используется $1, так как она получена автоматически из прошлого действия автоматора
$ echo ${A}
/User/iPhones/Desktop/Кафе
простой вывод значения, без обработки
$ echo ${A#i}
Phones/Desktop/Кафе
просим вывести всё, что следует после первого вхождения буквы i
$ echo ${A#iP}
hones/Desktop/Кафе
аналогично, но обратите внимание, что удаляется всё что было до совпадения, в том числе и оно само
$ echo ${A#*/}
User/iPhones/Desktop/Кафе
очень похоже на наш вариант, отсчет идет сначала строки
$ echo ${A##*/}
Кафе
наш случай, отсекаем все лишнее левее символа косой черты, анализ начинается с конца строки
Надеюсь, понимание данной команды позволит вам более смело реализовывать собственные потребности. И не забываем, данное действие можно назначить на любую папку, через контекстное меню и выбор соответствующей службы.
Заключение
Сегодня мы ступили на чуть более сложный путь познания возможностей Automator. И я надеюсь, что вы будете пробовать, экспериментировать и учиться решать свои задачи максимально удобным способом.
Понятно, что компьютер это инструмент и не обязательно уметь на нем программировать, но это знание позволяет использовать его более эффективно.
30 комментариев
Форум →Wow. Надо попробовать. Автор еще про Automator… )
Скрипт склеивает PDF файлы в один многостраничный https://yadi.sk/d/QTc85tJxgRGVZ
Скрипт создает образ DMG, файлы класть в папку
https://yadi.sk/d/d4YmzTDjgRHPe
Чет криворукий я. Ввел комнду echo ${A##*/} а в папке он мне указывает пустое имя с приставкой цифры. Например бросал в папку Test файл с именем Vary.pdf, в папке переименовало в -01.pdf вместо нужного test-01.pdf. Где я ошибся, подскажите пожалуйста.
@Red_Baron, надо писать echo ${1##*/} Переменную $1 задает автоматор, я так полагаю
Статья, выносящая мозг. Макинтош с человеческим лицом.
Запустить Винду.
Запустить Total Commander.
Отметить файлы для переименовки, Ctr+M
Сделать все, что нужно. Извините, что так просто.
@direless, запустить винду…хм
@direless, и так каждый раз, если нужно добавить к имеющимся, переименовать снова все заново, иначе будет ругаться, что такой файл существует.
тут один раз, далее просто запустить процес, по необзодимости.
Извините, что все намного удобнее.
@direless, на первом пункте у меня сбой. Что делать?
@airslider,
Изучать статью ! Все должно получиться, напишут и для OSX файловый менеджер рабочий.
Зачем для такой простейшей задачи использовать сторонний софт? о_О Есть же вроде bash на маке или его аналог.
@Innerspace, Вы точно пользовалось маком? Там Automator родная прога как бы…
@Александр, маком я точно не пользовалось. Потому и спрашиваю.
ОК, зачем вообще какой-то еще софт если есть баш и никсовые тулсеты? Все равно же в этом автоматоре скрипты писать надо. В чем смысл?
@Innerspace, многие вещи в автоматоре можно делать без скриптования + у него намного ниже порог входа чем в баше. Ну и самое главное, под автоматор есть много действий, которые специально для работы с внешним ПО созданы и на баше этого сделать просто нельзя, например сменить вид папок, отправить почтовое сообщение и т.п. вещи.
Нормуль статья
Виктор, спасибо Вам большое за данный цикл статей!
Разве средствами системы поставленную задачу решить нельзя? https://support.apple.com/kb/PH19067?locale=ru_RU&viewlocale=ru_RU
@dazer, так данный процесс позволяет автоматически переименовывать контент в папке на основании её имение. Т.е. делаете такую папку, кидаете в неё файлы, а они всегда имеют единообразное имя. А по ссылке это просто операции переименования.
А автоматом может прописывать id3 теги в файлы alac?
@bezromval, да, умеет добавлять тэги, но насчет alac не уверен. Могли бы подробнее сформировать запрос, тогда станет понятнее. Например, на основании названия файла нужно: внести информацию о названии песни и её номере в альбоме, на основании названия папки внести данные о названии алтьбома и т.д.
@bezromval, нужно подумать, цель: разобрать строку по символу /, но есть проблема, куда потом эти данные сохранять, поэтому возьму таймаут проверить.
Виктор продолжайте пожалуйста этот цикл! Все нужное. Спасибо!
А можно ли как-то с помощью Automator или других программ или действий сделать так, чтобы приложение Photos само сканировало и забирало новые фотки из какой-нибудь специальной папки (у меня это Яндекс.Диск)? iCloud не интересует.
@Pahanius, если у него есть API соответствующий, то можно.
У меня вот такая задача: я много работаю с таблицами в pages, но в конце каждого месяца мне нужно сдавать их,и постоянно приходится переделывать в excel, надоело, можно как то сделать чтобы в какой то папке и командой какой нибудь автоматом переделывались в формат excel
@fatushkto, если есть конвертер pages -> excel, который можно запускать в неинтерактивном режиме, то да.
@fatushkto, еще можно просто в csv сохранять таблицы. Правда, форматирования не будет никакого. Я надеюсь, маковые таблицы сохраняются в csv.
@fatushkto, Pages вроде аналог Word, может быть речь о Numbers?
Виктор, есть задача.
Идёт переписка с людьми. Необходимо архивировать письма в документ по каждой ветке обсуждения (теме сообщения) в pdf файл. Разумеется нужен паттерн названия (дата – email — название темы, например).
Это всё необходимо складывать в определённые папки на диске. Как пожелание, возможность добавить комментарий spotlight.
Есть одна задача, состоящая из двух:
Обе работать должны в фоновом режиме.
Первая:
1. делать скриншоты экрана каждые 30 секунд, причем не всей области, а только активного окна (или хотя бы без строки с датой и временем).
2. Если скрин не равен предыдущему сохраненному – сохраняем его.
3. Конвертируем сохраненное в самый легкий формат.
4. Называем гггг-мм-дд-чч-мм-сс.jpg в скрытой папке на компе.
Вторая:
1. Раз в час папку со скриншотами сохраняем в контейнер.
2. Контейнер отправляем на указанный майл или сообщение или папку дропбокса.
3. Удаляем отправленный контейнер.
Насколько реально сделать автоматором?
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Почему iPhone не может выйти в интернет по Wi-Fi
Почему Siri не зачитывает входящие сообщения iMessage в наушниках
Как отключать дисплей Mac без перевода в «режим сна»
Как восстановить перезаписанный файл на Mac
Что делать, если после обновления iOS или macOS задвоились контакты
Какие жесты появились на iPad в iOS 12
Почему приложения на iPhone потребляют заряд батареи в фоновом режиме?
Почему Apple Watch неправильно измеряют пульс