12

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

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

6 ответов6

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)
  • какой-то сторонний инструмент, который уже обеспечивает необходимую вам функциональность
6

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

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

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

4

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

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

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

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

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

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

Новый Сервис

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

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

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

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

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

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

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 часа и забуду к завтрашнему дню)

1

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

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

0

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

https://github.com/commonpike/DropShell

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .