Як виконати скрипт оболонки з вибраними файлами / папками в пошуку?


13

Я приїжджаю з Linux, де легко запустити скрипт проти набору файлів у nautilus або дельфіні, але я був здивований, побачивши, що це не так просто в OSX.

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

Відповіді:


8

Найпростіший, вбудований спосіб зробити це - просто перетягнути елементи з Finder у вікно терміналу . Коли ви їх відкинете , Термінал " набере" свої (втечені) імена. Потім ви можете скористатися редагуванням командного рядка оболонки для введення решти команди. Або якщо ви думаєте заздалегідь, ви можете набрати команду спочатку, а потім перетягнути елементи.

Версія "перетягнути спочатку":

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

Версія "наперед":

  1. У будь-якому порядку виконайте обидва:
    • У вікні терміналу введіть початкову частину вашої команди та пробіл (усе, крім імен шляхів).
    • Виберіть деякі елементи в Finder .
  2. Перетягніть вибрані елементи з Finder у вікно терміналу, куди ви ввели команду.
  3. Активуйте вікно терміналу та натисніть Return.

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

Деякі з можливостей автоматизації включають:

  • додаток для крапель AppleScript
  • звичайна програма AppleScript, запущена вбудованим меню скриптів або іншим запуском
    • отримати імена шляхів з вибору Finder
  • автоматизатора робочий процес, додаток або Finder плагін
  • виконуваний .commandфайл (зазвичай скрипт оболонки; відкрийте у Finder, щоб запустити його в терміналі )
    • отримати імена шляхів з вибору Finder (через osascript )
  • якийсь сторонній інструмент, який вже надає потрібну вам функціональність

7

Я не думаю, що існує спосіб зробити це безпосередньо. Ви можете створити додаток "Автоматизатор", який буде робити те, що ви шукаєте. Це показує, як виглядатиме стек Automator:

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

Збережіть результат як додаток, потім у пошуку знайдіть файли, клацніть правою кнопкою миші та виберіть «Відкрити за допомогою», а потім виберіть свою програму. (Можливо, вам потрібно буде вибрати "Інше ..." внизу списку програм.)

За допомогою цього методу ви не можете взаємодіяти зі сценарієм, але ви можете перебирати файли на певний сценарій оболонки.


Це ще простіше, якщо перетягнути файли через значок програми та скинути їх.
kiamlaluno

5

Послуги - це те, як обробляє подібні речі.

У меню програми (у даному випадку "Finder") (майже) завжди є Servicesпараметр меню, який надаватиме Сервіси, що застосовуються до поточної програми та її поточного стану. Зазвичай стан - це тип вибору об'єкта (текст, файли / папки тощо).

Вони можуть бути включені, відключені, і призначені комбінації клавіша на панелі System Preferences , що тільки має сенс для останніх з цих трьох, Keyboard.

Гарячі клавіши

Щоб створити Сервіс, який застосовує скрипт оболонки до файлів / папок у Finder:

Запустіть і зробіть Serviceдокумент нового типу.

Нова послуга

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

Це має виглядати приблизно так:

Приклад сценарію оболонки

автоматично розмістить її у вашій ~/Library/Servicesпапці, коли ви збережете, яка зробить її доступною (майже) негайно через Application -> Servicesменю або контекстне меню (клацання правою кнопкою миші).

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

отриманий документ TextEdit



2

Спираючись на відповіді вище, я побудував це справді

https://github.com/commonpike/DropShell

В основному додаток для яблучного сценарію, який викликає файл оболонки, розміщений у додатку, із аргументованими файлами. Ви можете змінити сценарій оболонки за потребою.


2

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


1

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

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


1

Я теж хотів це зробити, однак на відміну від рішень вище, я хотів створити цитовані параметри для сценарію оболонки. Ці інші методи чудові, але вони схожі на те, що пропонують "просто команду-в термінал", коли ви дійсно хочете 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, не впевнений.

(зауважте: все, що я знаю про розширений сценарій яблука та оболонки, я знову дізнався за останні 2 години і забуду до завтра)


Нещодавно намагався це зробити в баші, не вдалося, попросив сюди superuser.com/questions/1353966 , отримав відповіді, які вказують: ні, не можливо: ^ (Bash ви втратите, перейдете на рибну оболонку і на моїй роботі Mac. Примітка. що я дуже використовую трюк перетягування, про який згадував Кріс Джонсен вище, - дуже багато
П'єр Х'юстон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.