Как выполнить shell-команду при добавлении файла (Windows и Mac)
Запуск shell-команды или скрипта автоматически, когда файл попадает в папку — на Windows и Mac. Без Планировщика задач, cron и AppleScript. Вот как.
Раньше, чтобы выполнить команду при появлении файла в папке, нужен был Планировщик задач на Windows, cron или AppleScript на Mac, либо Hazel — если вы уже на Mac. File Arbor делает это правилом: выберите папку, задайте отбор файлов, выберите Выполнить команду — и ваш скрипт выполняется один раз для каждого подходящего файла, одинаково на Windows и macOS. Это функция Pro, появившаяся в версии 1.1.0.
В этом руководстве — как всё настроить, какие переменные доступны, как проверить команду до того, как доверить ей работу, и несколько готовых рецептов.
Почему это сложнее, чем должно быть
Задача простая: «когда здесь появляется файл, сделать с ним что-то». Инструменты — обычно нет.
На macOS Hazel много лет умеет запускать shell-скрипты как действие правила. Отличная штука — но только для Mac. Если вы на Windows, Hazel вам не вариант и никогда им не станет.
Встроенные способы неуклюжи. Планировщик задач Windows может запускать batch-файл по таймеру, но он следит за часами, а не за папкой, и логику отбора вы пишете сами в forfiles или PowerShell. На macOS действия папок (Folder Actions) и cron работают, но требуют возни с AppleScript или shell-обвязкой и отладки в Консоли. Ни один из этих способов не даёт списка обработанных файлов и того, что вывела каждая команда.
На деле большинству нужно правило: отобрать файл, выполнить команду, увидеть результат. Именно этот пробел и закрывает действие «Выполнить команду» в File Arbor — на обеих платформах.
Что делает действие «Выполнить команду»
Правило File Arbor — это пара ЕСЛИ/ТО. Сторона ЕСЛИ отбирает файлы по расширению, шаблону имени, полному regex, размеру или возрасту. Сторона ТО — это действие. Выполнить команду — одно из действий, наряду с перемещением, переименованием, перемещением в корзину и удалением навсегда.
Когда файл подходит — при ручном запуске, по расписанию или в момент появления в отслеживаемой папке, — File Arbor выполняет вашу команду один раз для этого файла. На Windows запуск идёт через системную оболочку, поэтому работают синтаксис batch, PowerShell и всё, что есть в вашем PATH. На macOS запуск тоже идёт через оболочку, так что доступны привычные инструменты командной строки. Одна и та же модель правил, один и тот же редактор, обе платформы.
«Выполнить команду» — функция Pro. Если вы на бесплатном плане, её можно открыть с лицензией Pro — разовая покупка с гарантией возврата в течение 30 дней.
Как выполнить команду при добавлении файла
Вот полная настройка. Занимает около двух минут.
- Добавьте папку, которую хотите отслеживать. Нажмите Add Folder и выберите, куда попадают файлы —
Downloads, папку проекта, каталог вывода сканера, что угодно по вашему сценарию. - Создайте правило и задайте условия отбора. Добавьте правило и определите сторону ЕСЛИ. Отбор по расширению (
.md), шаблону имени, regex вроде^invoice_\d{4}\.pdf$, порогу размера или возрасту. Команду запускают только подходящие файлы. - Выберите «Выполнить команду» в качестве действия. На стороне ТО выберите Выполнить команду и введите команду. Используйте переменные ниже там, где нужен путь или имя файла.
- Проверьте команду на тестовом файле. Нажмите Проверить. File Arbor выполнит команду один раз на образце и покажет код выхода, вывод и длительность. Исправьте всё здесь, до того как она хоть раз отработает без присмотра.
- Сохраните правило и включите автоматический режим. Сохраните его, затем включите автоматический режим, чтобы запускать в реальном времени по мере появления файлов. Правила также можно запускать вручную или по расписанию.
Вот и весь цикл. Никакого batch-файла, задачи в планировщике и скриптов, которые приходится поддерживать отдельно от правила.
Какие переменные доступны
Внутри команды доступны три переменные:
{filePath}— полный путь к подошедшему файлу{fileName}— только имя файла, с расширением{folder}— папка, в которой лежит файл
File Arbor сам берёт их в кавычки, так что пути с пробелами работают, и вам не нужно ничего оборачивать в кавычки. Вы пишете {filePath}, а не "{filePath}".
Сначала проверьте, потом доверяйте
Команда, которая работает без присмотра, полезна только тогда, когда вы знаете, что она работает. Это обеспечивают две вещи.
Кнопка Проверить выполняет вашу команду один раз на файле-образце и показывает код выхода, вывод и длительность. Вы видите ровно то, что делает команда, ещё до сохранения правила.
Панель Запуски команд записывает каждый реальный запуск — команду, файл, код выхода и полный вывод. Когда что-то падает в три часа ночи, вам не приходится гадать. Вывод уже ждёт вас, когда вы заглянете.
Готовые примеры
Автокоммит заметок в git-репозиторий. Бросьте Markdown-файл в папку заметок — и он закоммитится автоматически.
- Отслеживать:
C:\Projects\notes(или~/Projects/notesна Mac) - Условие: расширение
.md - Команда:
git -C {folder} add {fileName} && git -C {folder} commit -m "Add {fileName}"
Сжать видео, как только оно попало в папку. Перекодируйте записи экрана, чтобы сэкономить место.
- Условие: расширение
.mov - Команда:
ffmpeg -i {filePath} -vcodec libx265 -crf 28 {folder}/compressed-{fileName}
Выгрузить готовые экспорты на внешний сервер. Отправьте рендер на резервный сервер через rsync или scp.
- Условие: имя начинается с
export_ - Команда:
rsync {filePath} backup:/media/incoming/
Уведомить себя о появлении конкретного файла. Вызовите уведомление на рабочем столе или webhook, чтобы знать, что пришёл счёт или отчёт.
Схема всегда одна: отобрать файл, запустить инструмент, которым вы уже пользуетесь. File Arbor — это триггер и выбор файла; работу делает ваша команда.
Чем это отличается от shell-скриптов Hazel
Если вы пришли сюда из сценария Hazel, соответствие прямое. Действие «run shell script» в Hazel и действие «Выполнить команду» в File Arbor оба выполняют команду для каждого подошедшего файла с доступом к его пути. Разница в охвате: Hazel работает только на macOS, а File Arbor выполняет одно и то же правило на Windows и Mac. Подробное сравнение бок о бок — в статье File Arbor против Hazel.
Чего File Arbor не повторяет — это специфичные для macOS хуки Hazel: AppleScript и условия по метаданным Spotlight. Если ваша автоматизация зависит от них, на Mac у Hazel по-прежнему есть преимущество. А для запуска команд и скриптов над файлами они на равных.
Ограничения и безопасность
Несколько вещей, которые стоит знать, прежде чем настраивать что-то важное:
- Один запуск на файл. Подошедший файл запускает команду один раз, а не по кругу.
- Тайм-аут 30 секунд. По умолчанию команды прерываются через 30 секунд, поэтому зависший скрипт не заблокирует ваши другие правила.
- Нет в сборке из Microsoft Store. Правила Store запрещают приложениям запускать произвольные команды, поэтому версия из Store идёт без «Выполнить команду». В прямой загрузке оно есть.
Начните с одной команды
Выберите одно повторяющееся действие, которое вы делаете с файлами вручную — коммит, сжатие, выгрузку, — и превратите его в одно правило. Скачайте File Arbor и начните с бесплатного плана или почитайте, что ещё вышло в 1.1.0. Впервые в приложении? Руководство для начинающих настроит ваше первое правило примерно за пять минут.
FAQ
Может ли File Arbor выполнять shell-скрипты, как Hazel?
Да. Действие «Выполнить команду» в File Arbor запускает любую shell-команду или скрипт один раз для каждого подходящего файла, с переменными {filePath}, {fileName} и {folder}. Оно покрывает то же, что и действие shell-скрипта в Hazel, — и работает на Windows, чего Hazel не умеет. Это функция Pro.
Работает ли запуск команд по событиям файлов на Windows?
Да. File Arbor выполняет команды и на Windows, и на macOS. На Windows запуск идёт через системную оболочку, поэтому работают команды batch, PowerShell и любой инструмент из вашего PATH. Планировщик задач или отдельный batch-файл не нужны.
Доступно ли действие «Выполнить команду» в бесплатной версии?
Нет. «Выполнить команду» — функция Pro: разовая покупка за 24,99 $ с гарантией возврата в течение 30 дней. Бесплатный план всё так же включает действия перемещения, переименования и перемещения в корзину.
Почему «Выполнить команду» нет в версии из Microsoft Store?
Правила Microsoft Store запрещают приложениям запускать произвольные команды, поэтому сборка из Store идёт без действия «Выполнить команду». Чтобы получить его, скачайте File Arbor напрямую с filearbor.com. Все остальные функции в обеих сборках идентичны.
Что будет, если команда зависнет или завершится с ошибкой?
По умолчанию команды прерываются через 30 секунд, поэтому застрявший скрипт не заблокирует ваши правила. Каждый запуск записывается в панель «Запуски команд» с кодом выхода и полным выводом — так что сбой в три часа ночи будет ждать вас со всеми подробностями, когда вы заглянете.
