Учимся работать с Automator. Умное переименование

Продолжаем рассматривать примеры использования Automator в повседневной жизни.
В первой статье в комментариях был задан вопрос: как сделать автоматической переименование файлов на основании имени папки.

Попробуем решить данную задачу максимально красиво.

Задача

Произвести автоматическое переименование файлов в папке, проигнорировав предыдущее имя. В качестве нового имени использовать название папки и инкрементальный индекс.

Для решения задачи потребуются следующие компоненты:

  • Установить значение переменной
  • Получить значение переменной
  • Запустить shell-скрипт
  • Получить содержимое папок
  • Переименовать объекты Finder

Я помню, что обещал не лезть в дебри скриптования – к сожалению, без этого задачу решить не получится. Но команда будет короткой, а я подробно объясню, что она делает и как работает.

Начинаем как всегда, с создания нового автомат — Действие папки. Затем добавляем компоненты, для упрощения, вставляю их прямые названия без склонений.

  1. Установить значение переменной. Указываем имя Путь к папке.
  2. Запустить Shell-скрипт. В нем пишем: echo ${1##*/} и не забываем проставить опцию: Передать ввод → как аргументы
  3. Установить значение переменной. Создаем новую переменную Имя папки, которой будет присвоен результат работы из п.2
  4. ВНИМАНИЕ Получить значение переменной, в этом пункте обязательно выставляем параметр: Игнорировать входные данные этого действия.
  5. Получить содержимое папок
  6. Переименовать объекты Finder. Так как нам не требуется сохранять прошлое имя и цель стоит в построение последовательности имен, то выбираем пункт: Сделать последовательным. После чего получим интерфейс, где требуется указать новое имя, в него подставляем нашу переменную Имя папки, а дальше все интуитивно понятно.

Теория

Теперь пройдем по неявным местам. Сделаем это в формате вопрос/ответ.

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

A. Если попробовать использовать переменную Путь к папке, то система её возвращает не просто как имя, например Кафе, а в виде полного пути /Users/iPhones/Desktop/Кафе, что не очень подходит в качестве имени для файлов. Но и это еще не все, при непосредственном переименовании происходит трансляция данного пути во внутренний формат операционной системы, итоговое имя примет вид: $(B1421039-E0DA–4111-A00D-DF47E1ADF07)_01.jpg.Поэтому мы вынуждены использовать вторую переменную и скрипт.

Q. Что за команда echo ${1##*/}

A. Команда echo – обозначает вывод значения на экран, в нашем случае оно сразу попадает в переменную. Если бы мы написали:

echo $1

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

Читайте также  App Store Бородино. Недаром помнит вся Россия

Конкретно, двойной ##, — удаляющий самую длинную часть строки, предшествующую шаблону. А шаблоном в нашем случае выступает ча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. И я надеюсь, что вы будете пробовать, экспериментировать и учиться решать свои задачи максимально удобным способом.

Понятно, что компьютер это инструмент и не обязательно уметь на нем программировать, но это знание позволяет использовать его более эффективно.

Источник: iphones.ru

RIOS