Продолжаем рассматривать примеры использования 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. И я надеюсь, что вы будете пробовать, экспериментировать и учиться решать свои задачи максимально удобным способом.
Понятно, что компьютер это инструмент и не обязательно уметь на нем программировать, но это знание позволяет использовать его более эффективно.
Источник: