Jak wykonać skrypt powłoki z wybranymi plikami / folderami w wyszukiwarce?

13

Pochodzę z Linuksa, gdzie łatwo jest uruchomić skrypt przeciwko zestawowi plików w nautilusie lub delfinie, ale byłem zaskoczony, widząc, że nie jest to łatwe w OSX.

Najlepiej byłoby, gdybym był w stanie przytrzymać klawisz Ctrl i kliknąć wybrany element w wyszukiwarce, wybrać mój skrypt i wyświetlić okno terminala, aby pokazać postęp lub dowolną interakcję użytkownika.

Jeremy Cantrell
źródło

Odpowiedzi:

8

Najprostszym wbudowanym sposobem na to jest przeciągnięcie elementów z Findera do okna Terminalu . Kiedy upuścisz je, Terminal „wpisze” ich (ucieczkowe) nazwy ścieżek. Następnie możesz użyć edycji wiersza poleceń powłoki, aby wprowadzić resztę polecenia. Lub jeśli myślisz o przyszłości, możesz najpierw wpisać polecenie, a następnie przeciągnąć elementy.

Wersja „najpierw przeciągnij”:

  1. Wybierz i przeciągnij niektóre elementy Findera do okna terminala, które pokazuje monit powłoki. Terminal wstawi (ucieczkowe) nazwy ścieżek.
  2. Wpisz Control+ A(przejdź do początku linii; ⌃A jest ustawieniem domyślnym, ale różni się w zależności od powłoki / konfiguracji).
  3. Wpisz polecenie i spację (zostaną wstawione przed nazwami ścieżek).

Wersja „z myślą o przyszłości”:

  1. W dowolnej kolejności wykonaj obie czynności:
    • W oknie terminala wpisz początkową część polecenia i spację (wszystko oprócz nazw ścieżek).
    • Wybierz niektóre elementy w Finderze .
  2. Przeciągnij wybrane elementy z Findera do okna Terminal, w którym wpisałeś polecenie.
  3. Aktywuj okno Terminal i naciśnij Return.

Możesz (jak wskazały inne odpowiedzi) przejść do AppleScript lub Automator, jeśli potrzebujesz bardziej zautomatyzowanego rozwiązania. Ponieważ dodatkowe „części ruchome” mogą zwiększyć złożoność rozwiązania, będziesz musiał porównać zalety powyższego procesu (ręczny, ale elastyczny) ze złożonością wdrożenia jednego lub więcej zautomatyzowanych rozwiązań.

Niektóre możliwości automatyzacji obejmują:

  • aplikacja kroplowa AppleScript
  • zwykły program AppleScript uruchamiany przez wbudowane menu skryptów lub inny program uruchamiający
    • pobierz nazwy ścieżek z wyboru Findera
  • przepływ pracy Automator, aplikacja lub wtyczka Finder
  • .commandplik wykonywalny (zwykle skrypt powłoki; otwórz w Finderze, aby uruchomić go w terminalu )
    • pobierz ścieżki z wyboru Findera (przez osascript )
  • jakieś narzędzie innej firmy, które już zapewnia potrzebną funkcjonalność
Chris Johnsen
źródło
7

Nie sądzę, że istnieje sposób, aby to zrobić bezpośrednio. Możesz zbudować aplikację „Automator”, która wykona część tego, czego szukasz. To pokazuje, jak wyglądałby stos Automatora:

wprowadź opis zdjęcia tutaj

Zapisz wynik jako aplikację, a następnie w wyszukiwarce wybierz pliki, kliknij prawym przyciskiem myszy i wybierz „Otwórz za pomocą”, a następnie wybierz aplikację. (Może być konieczne wybranie opcji „Inne ...” u dołu listy aplikacji).

Za pomocą tej metody nie można wchodzić w interakcje ze skryptem, ale można zapętlić pliki, aby wykonać skrypt powłoki.

Peter Murray
źródło
Jeszcze łatwiejsze jest przeciągnięcie plików nad ikonę aplikacji i upuszczenie ich.
kiamlaluno
5

Usługi to sposób, w jaki obsługuje takie rzeczy.

W menu aplikacji (w tym przypadku „Finderze”) (prawie) zawsze jest Servicesdostępna opcja menu, która zapewni usługi mające zastosowanie do bieżącej aplikacji i jej bieżącego stanu. Zazwyczaj stan określa typ wybranego obiektu (tekst, pliki / foldery itp.).

Mogą być włączona, wyłączona, a przypisane skróty klawiaturowe w systemie panelu preferencji, które ma sens tylko dla ostatniego z tych trzech, Keyboard.

Skróty klawiszowe

Aby utworzyć usługę, która stosuje skrypt powłoki do plików / folderów w Finderze:

Uruchom i stwórz nowy Servicedokument typu.

Nowa usługa

  • ustaw typ obiektu, którego dotyczy usługa ( files or folders)
  • ustaw aplikację, w której usługa jest dostępna ( )
    • Alternatywnie jest Get Selected Finder Itemsakcja.
  • dodaj akcję z Run Shell Script
  • zdecyduj, czy chcesz wprowadzić dane wejściowe jako argumenty czy wejście

Powinno to wyglądać mniej więcej tak:

przykładowy skrypt powłoki

automatycznie umieści go w ~/Library/Servicesfolderze podczas zapisywania, dzięki czemu będzie on dostępny (prawie) natychmiast za pośrednictwem Application -> Servicesmenu lub menu kontekstowego (kliknięcie prawym przyciskiem).

testuj foldery

wynikowy dokument TextEdit

Jezioro
źródło
2

Na podstawie powyższych odpowiedzi zbudowałem tę rzecz

https://github.com/commonpike/DropShell

Zasadniczo aplikacja AppleScript, która wywołuje plik powłoki znajdujący się w aplikacji z usuniętymi plikami jako argumentami. W razie potrzeby możesz zmodyfikować skrypt powłoki.

pospolity
źródło
2

W oparciu o odpowiedź commonpike stworzyłem AppleScript, który przekierowuje wszystkie upuszczone na niego pliki, do skryptu powłoki o pasującej nazwie. Po prostu zapisz jako aplikację z poziomu ScriptEditor firmy Apple i zmień nazwę na script.app, aby dopasować do swojego script.sh https://github.com/PHolker/scripts/blob/master/DropScript.scpt

PHolker
źródło
1

W Mac OS X preferowanym językiem skryptowym jest Applescript. Możesz utworzyć kroplę (skrypt, który zrobi coś po upuszczeniu niektórych plików na jej ikonę), umieść ikonę skryptu (którą można zapisać jako aplikację) na pulpicie oraz przeciągnij i upuść pliki, które chcesz przekazać do scenariusz.

Alternatywnie możesz użyć akcji folderu. Możliwe jest powiązanie skryptu Applescript z folderem, który będzie wykonywany za każdym razem, gdy niektóre pliki (lub katalogi) zostaną upuszczone na folder.

kiamlaluno
źródło
1

Też chciałem to zrobić, jednak w przeciwieństwie do powyższych rozwiązań, chciałem stworzyć cytowane parametry dla skryptu powłoki. Te inne metody są w porządku, ale w pewnym sensie przypominają sugerowanie „po prostu Command-V w terminalu”, kiedy naprawdę chcesz pbpaste.

Chciałem stworzyć funkcję powłoki, której będę mógł używać w moich skryptach, które rozszerzyły się na parametry pliku dla każdego wyboru Findera. Używam skorupy ryby i wydaje się, że to działa trochę:

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

Używany (ponownie w skorupce ryby) jak convert-video (selection).

W funkcji bash może być konieczne zacytowanie danych wyjściowych czymś takim jak | tr '\n' '\0' | xargs -0 printf "%q" {}na końcu tego polecenia osascript, co nie jest pewne.

(uwaga: wszystko, co wiem na temat zaawansowanego skryptów AppleScript i powłoki, którego nauczyłem się w ciągu ostatnich 2 godzin i zapomnę do jutra)

Pierre Houston
źródło
Próbowałem to zrobić niedawno w bashu, nie powiodło się, zapytałem tutaj superuser.com/questions/1353966 , otrzymałem odpowiedzi, które wskazują: nie, niemożliwe: ^ (Bash stracisz, przejdę do powłoki rybnej na moim komputerze Mac również. Uwaga że często używam sztuczki „przeciągnij i znajdź”, o której wspomniał Chris Johnsen powyżej
Pierre Houston,