Как выполнить скрипт оболочки с выбранными файлами / папками в Finder?

13

Я пришел из Linux, где легко запустить скрипт для набора файлов в nautilus или dolphin, но я был немного удивлен, увидев, что это не так просто в OSX.

Предпочтительно, я хотел бы иметь возможность щелкнуть по некоторому выбору в Finder, удерживая клавишу Ctrl, выбрать мой сценарий и открыть окно терминала, чтобы показать прогресс или любое взаимодействие с пользователем.

Джереми Кантрелл
источник

Ответы:

8

Самый простой встроенный способ сделать это - просто перетащить элементы из Finder в окно терминала . Когда вы их отбрасываете, Терминал «печатает» их (экранированные) пути. Затем вы можете использовать редактирование командной строки вашей оболочки для ввода остальной части команды. Или, если вы думаете о будущем, вы можете сначала ввести команду, а затем перетащить элементы.

Версия «перетащить первым»:

  1. Выберите и перетащите некоторые элементы Finder в окно терминала , в котором отображается приглашение оболочки. Терминал вставит (экранированные) пути.
  2. Тип Control+ A(перейти к началу строки; ⌃A по умолчанию, но зависит от оболочки / конфигурации).
  3. Введите вашу команду и пробел (он будет вставлен перед путями).

Версия «думая впереди»:

  1. В любом порядке выполните оба действия:
    • В окне терминала введите начальную часть вашей команды и пробел (все, кроме имен путей).
    • Выберите некоторые элементы в Finder .
  2. Перетащите выбранные элементы из Finder в окно терминала, где вы ввели команду.
  3. Активируйте окно терминала и нажмите Return.

Вы можете (как указали другие ответы) обратиться к AppleScript или Automator, если вам нужно более автоматизированное решение. Поскольку дополнительные «движущиеся части» могут усложнить решение, вам придется сопоставить преимущества вышеуказанного процесса (ручного, но гибкого) со сложностью реализации одного или нескольких автоматизированных решений.

Некоторые из возможностей автоматизации включают в себя:

  • приложение капли AppleScript
  • простая программа AppleScript, запускаемая встроенным меню сценария или другим средством запуска
    • получить пути из выбора Finder
  • рабочий процесс Automator, приложение или плагин Finder
  • исполняемый .commandфайл (обычно сценарий оболочки; открыть в Finder для запуска его в терминале )
    • получить пути из выбора Finder (через osascript )
  • какой-то сторонний инструмент, который уже обеспечивает необходимую вам функциональность
Крис Джонсен
источник
7

Я не думаю, что есть способ сделать это напрямую. Вы можете создать приложение «Automator», которое будет делать то, что вы ищете. Это показывает, как будет выглядеть стек Automator:

введите описание изображения здесь

Сохраните результат как приложение, затем в искателе выберите файлы, щелкните правой кнопкой мыши и выберите «Открыть с помощью», затем выберите свое приложение. (Вам может потребоваться выбрать «Другое ...» внизу списка приложений.)

Вы не можете взаимодействовать со сценарием с помощью этого метода, но вы можете перебирать файлы, чтобы выполнить какой-либо сценарий оболочки.

Питер Мюррей
источник
Еще проще, если вы перетащите файлы поверх значка приложения и уроните их.
kiamlaluno
5

Сервисы - это то, как обрабатывает вещи.

В меню приложения (в данном случае «Искатель») всегда есть (почти) пункт Servicesменю, который будет предоставлять услуги, применимые к текущему приложению и его текущему состоянию. Обычно указывается тип объекта (текст, файлы / папки и т. Д.).

Их можно включать, отключать и назначать сочетания клавиш на панели «Системные настройки», которые имеют смысл только для последних трех Keyboard.

горячие клавиши

Чтобы создать Сервис, который применяет сценарий оболочки к файлам / папкам в Finder:

Запустите и создайте новый Serviceтип документа.

Новый Сервис

  • установить тип объекта, к которому применяется Сервис ( files or folders)
  • установить приложение, в котором доступен сервис ( )
    • В качестве альтернативы есть Get Selected Finder Itemsдействие.
  • добавить действие Run Shell Script
  • решить , если вы хотите , чтобы вход в качестве аргументов или

Это должно выглядеть примерно так:

пример сценария оболочки

~/Library/ServicesПри сохранении автоматически поместит его в вашу папку, что сделает его (почти) доступным сразу через Application -> Servicesменю или контекстное меню (щелчок правой кнопкой мыши).

тестовые папки

итоговый документ TextEdit

Озеро
источник
Оглядываясь назад, я должен был указать, как создать службу OS X, которая передает путь к файлу в сценарий оболочки? который имеет очень похожий ответ .
Озеро
1

В Mac OS X предпочтительным языком сценариев является Applescript. Вы можете создать каплю (скрипт, который будет делать что-то, когда вы перетаскиваете некоторые файлы на его значок), размещать значок скрипта (который можно сохранить как приложение) на рабочем столе и перетаскивать файлы, которые вы хотите передать на скрипт.

В качестве альтернативы вы можете использовать действия с папками. Можно связать сценарий Applescript с папкой, которая будет выполняться каждый раз, когда некоторые файлы (или каталоги) будут отброшены над папкой.

kiamlaluno
источник
1

Я тоже хотел это сделать, однако, в отличие от описанных выше решений, я хотел создать параметры в кавычках для сценария оболочки. Эти другие методы хороши, но они вроде как предлагают «просто команда-v в терминал», когда вы действительно хотите pbpaste.

Я хотел создать функцию оболочки, которую я мог бы использовать в своих сценариях, которая расширилась до параметров файла для каждого выбора Finder. Я использую рыбные раковины, и это, кажется, работает несколько:

function selection
    osascript -e "tell application \"Finder\" to set s to the selection as alias list" -e "repeat with f in s" -e "set contents of f to POSIX path of f" -e "end repeat" -e "set AppleScript's text item delimiters to linefeed" -e "s as string"
end

Используется (опять же в раковине рыбы) вроде convert-video (selection).

В функции bash может потребоваться | tr '\n' '\0' | xargs -0 printf "%q" {}заключить в кавычки что-то вроде конца этой команды osascript, не уверен.

(примечание: все, что я знаю о продвинутых сценариях appleScript и shell-скриптах, я переучил за последние 2 часа и забуду к завтрашнему дню)

Пьер Хьюстон
источник
Пытался сделать это в Bash недавно, не удалось, спросил здесь superuser.com/questions/1353966 , получил ответы, которые указывают: нет, невозможно: ^ (Bash вы проиграете, я тоже переключусь на fish shell на моем рабочем Mac. Примечание что я действительно использую трюк перетаскивания, упомянутый Крисом Джонсеном выше, довольно часто
Пьер Хьюстон,
1

Основываясь на ответах выше, я построил эту штуку

https://github.com/commonpike/DropShell

В основном это приложение appleScript, которое вызывает шелл-файл, расположенный в приложении, с удаленными файлами в качестве аргументов. Вы можете изменить скрипт оболочки по мере необходимости.

commonpike
источник
0

Основываясь на ответе commonpike, я создал AppleScript, который перенаправляет все файлы, сброшенные на него, в сценарий оболочки с соответствующим именем. Просто сохраните как приложение из Apple ScriptEditor и переименуйте в script.app, чтобы он соответствовал вашему script.sh https://github.com/PHolker/scripts/blob/master/DropScript.scpt

PHolker
источник