Come eseguire uno script di shell con i file / le cartelle selezionati nel finder?


13

Vengo da Linux, dove è facile eseguire uno script su una serie di file in nautilus o dolphin, ma sono rimasto sorpreso nel vedere che questo non è facile in OSX.

Preferibilmente, mi piacerebbe poter fare clic tenendo premuto il tasto Ctrl su una selezione nel Finder, scegliere il mio script e fare apparire una finestra terminale per mostrare i progressi o qualsiasi interazione dell'utente.

Risposte:


8

Il modo più semplice e integrato per farlo è semplicemente trascinare gli elementi dal Finder alla finestra di un Terminale . Quando li rilasci , il Terminale "digita" i loro nomi di percorso (scappati). È quindi possibile utilizzare la modifica della riga di comando della shell per immettere il resto del comando. Oppure, se stai pensando in anticipo, puoi digitare prima il comando, quindi trascinare gli elementi.

La versione "trascina prima":

  1. Seleziona e trascina alcuni elementi del Finder in una finestra Terminale che mostra un prompt della shell. Il terminale inserirà i nomi dei percorsi (con escape).
  2. Digita Control+ A(vai all'inizio della riga; ⌃A è l'impostazione predefinita, ma varia a seconda della shell / configurazione).
  3. Digita il tuo comando e uno spazio (verrà inserito prima dei nomi dei percorsi).

La versione "pensando al futuro":

  1. In qualsiasi ordine, esegui entrambi:
    • In una finestra Terminale , digitare la parte iniziale del comando e dello spazio (tutto tranne i nomi dei percorsi).
    • Seleziona alcuni elementi nel Finder .
  2. Trascina gli elementi selezionati dal Finder nella finestra Terminale in cui hai digitato il comando.
  3. Attiva la finestra Terminale e premi Return.

Puoi (come indicato da altre risposte) passare a AppleScript o Automator se hai bisogno di una soluzione più automatizzata. Poiché le "parti mobili" extra possono aggiungere una certa complessità alla soluzione, dovrai valutare i vantaggi del processo sopra descritto (manuale, ma flessibile) rispetto alla complessità dell'implementazione di una o più soluzioni automatizzate.

Alcune delle possibilità di automazione includono:

  • un'applicazione droplet AppleScript
  • un semplice programma AppleScript lanciato dal menu script integrato o da un altro programma di avvio
    • ottieni i percorsi dalla selezione del Finder
  • un flusso di lavoro, un'applicazione o un plug-in Finder di Automator
  • un .commandfile eseguibile (di solito uno script di shell; apri nel Finder per eseguirlo nel Terminale )
    • ottieni i nomi dei percorsi dalla selezione del Finder (tramite osascript )
  • alcuni strumenti di terze parti che già forniscono le funzionalità di cui hai bisogno

7

Non penso che ci sia un modo per farlo direttamente. Puoi creare un'applicazione "Automator" che farà qualcosa di ciò che stai cercando. Questo mostra come sarebbe lo stack di Automator:

inserisci qui la descrizione dell'immagine

Salvare il risultato come applicazione, quindi nel Finder selezionare i file, fare clic con il tasto destro e selezionare "Apri con", quindi selezionare l'applicazione. (Potrebbe essere necessario selezionare "Altro ..." nella parte inferiore dell'elenco delle applicazioni.)

Non puoi interagire con lo script con questo metodo, ma puoi eseguire il loop dei file per eseguire alcuni script di shell.


È ancora più semplice trascinare i file sull'icona dell'applicazione e rilasciarli.
Kiamlaluno,

5

I servizi sono il modo in cui gestisce questo genere di cose.

Sotto il menu dell'applicazione (in questo caso 'Finder') c'è (quasi) sempre Servicesun'opzione di menu che fornirà i servizi che si applicano all'applicazione corrente e al suo stato attuale. In genere lo stato è il tipo di oggetto selezionato (testo, file / cartelle, ecc.).

Possono essere abilitati, disabilitati e assegnati scorciatoie da tastiera nel pannello Preferenze di Sistema che ha senso solo per l'ultimo di quei tre Keyboard,.

tasti rapidi

Per creare un servizio che applica uno script di shell a file / cartelle nel Finder:

Avvia e crea un nuovo Servicetipo di documento.

Nuovo servizio

  • imposta il tipo di oggetto a cui si applica il Servizio ( files or folders)
  • imposta l'applicazione in cui è disponibile il servizio ( )
    • In alternativa c'è Get Selected Finder Itemsun'azione.
  • aggiungi un'azione di Run Shell Script
  • decidere se si desidera l'input come argomenti o

Dovrebbe assomigliare a qualcosa di simile a questo:

esempio di script di shell

lo posizionerà automaticamente nella tua ~/Library/Servicescartella quando salvi il che lo renderà disponibile (quasi) immediatamente tramite il Application -> Servicesmenu o il menu contestuale (clic destro).

testare le cartelle

documento TextEdit risultante



1

In Mac OS X, il linguaggio di script preferito è Applescript. È possibile creare un droplet (uno script che farà qualcosa quando si rilasciano alcuni file sulla sua icona), posizionare l'icona dello script (che può essere salvata come applicazione) sul desktop e trascinare e rilasciare i file che si desidera passare al script.

In alternativa, è possibile utilizzare le azioni delle cartelle. È possibile associare uno script Applescript a una cartella che verrà eseguita tutte le volte che alcuni file (o directory) vengono rilasciati sulla cartella.


1

Anch'io volevo farlo, tuttavia a differenza delle soluzioni sopra, volevo produrre parametri citati per uno script di shell. Quegli altri metodi vanno bene, ma sono un po 'come suggerire "solo command-v nel terminale" quando ciò che vuoi davvero è pbpaste.

Volevo creare una funzione shell che potessi usare nei miei script che si espandeva in parametri di file per ogni selezione del Finder. Uso il guscio di pesce e questo sembra funzionare in qualche modo:

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

Usato (di nuovo nel guscio di pesce) come convert-video (selection).

In una funzione bash, potrebbe essere necessario citare l'output con qualcosa di simile | tr '\n' '\0' | xargs -0 printf "%q" {}alla fine di quel comando osascript, non sono sicuro.

(nota: tutto quello che so su scripting avanzato di shell e apple script ho imparato di nuovo nelle ultime 2 ore e lo dimenticherò entro domani)


Di recente ho provato a farlo a Bash, non ci sono riuscito, mi hanno chiesto qui superuser.com/questions/1353966 , ho ottenuto risposte che indicano: no, impossibile: ^ (Bash che perdi, passerò anche a conchiglie di pesce sul mio Mac di lavoro. Nota che uso il trucco del drag-to-finder menzionato sopra da Chris Johnsen sopra, parecchio.
Pierre Houston,

1

Sulla base delle risposte di cui sopra, ho costruito questa cosa

https://github.com/commonpike/DropShell

Fondamentalmente un'app applecript che chiama un file shell situato nell'app con i file rilasciati come argomenti. È possibile modificare lo script della shell secondo necessità.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.