Je viens de Linux où il est facile de gérer un script contre un ensemble de fichiers à Nautilus ou à Dauphin, mais j'étais un peu surpris de voir que ce n'est pas facile dans OSX.
De préférence, j'aimerais pouvoir être capable de cliquer sur une sélection de la sélection dans Finder, choisissez mon script et une fenêtre de terminal apparaît pour afficher la progression ou toute interaction utilisateur.
Le moyen le plus facile et intégré de le faire est de simplement faire glisser les éléments de -Finder à une fenêtre terminal. Lorsque vous les déposez, Terminal "Tapez" leurs noms de chemin (échappés). Vous pouvez ensuite utiliser l'édition de la ligne de commande de votre shell pour entrer le reste de la commande. Ou si vous pensez de l'avant, vous pouvez saisir la commande d'abord puis glisser dans les éléments.
La version "Drag d'abord":
La version "pensant à venir":
Vous pouvez (comme d'autres réponses que d'autres réponses), tournez vers AppleScript ou Automator si vous avez besoin de plus une solution plus automatisée. Étant donné que les "parties mobiles" supplémentaires peuvent ajouter une certaine complexité à la solution, vous devrez peser les avantages du processus ci-dessus (manuel, mais flexible) contre la complexité de la mise en œuvre d'une ou de plusieurs des solutions automatisées.
Certaines des possibilités d'automatisation incluent:
.command
Fichier (généralement un script shell; ouvert dans Finder pour l'exécuter dans terminal) [.____]Je ne pense pas qu'il y ait un moyen de le faire directement. Vous pouvez créer une application "Automator" qui fera une partie de ce que vous recherchez. Cela montre à quoi ressemblerait la pile automatisatrice:
Enregistrez le résultat en tant qu'application, puis dans le Finder Sélectionnez les fichiers, cliquez avec le bouton droit de la souris et sélectionnez "Ouvrir avec" puis choisissez votre application. (Vous devrez peut-être sélectionner "Autre ..." au bas de la liste des applications.)
Vous n'obtenez pas à interagir avec le script avec cette méthode, mais vous pouvez faire boucler les fichiers pour effectuer un script shell.
Les services sont comment OSX gère ce genre de chose.
Dans le menu Application (dans ce cas "Finder"), il existe (presque) une option de menu Services
qui fournira des services qui s'appliquent à l'application actuelle et son état actuel. Typiquement, l'état est le type d'objet sélectionné (texte, fichiers/dossiers, etc.).
Ils peuvent être activés, désactivés et attribués de raccourcis clavier dans le panneau Préférences Système qui n'a aucun sens pour le dernier de ces trois, Keyboard
.
Pour créer un service qui applique un script shell à des fichiers/dossiers de Finder:
Lancement Automator et crée un nouveau document Service
.
files or folders
)Get Selected Finder Items
.Run Shell Script
Ça devrait ressembler a quelque chose comme ca:
Automator le placera automatiquement dans votre dossier ~/Library/Services
lorsque vous économisez, ce qui le rendra disponible (presque) immédiatement via le menu Application -> Services
ou le contextuel (droit Cliquez) sur) menu.
Basé sur les réponses ci-dessus, j'ai construit cette chose
https://github.com/commonpike/dropshell
De fondement une application AppleScript qui appelle une coquillée située dans l'application avec les fichiers déposés comme arguments. Vous pouvez modifier le script shell au besoin.
Basé sur la réponse de Commonpike, j'ai créé un AppleScript, qui redirige tous les fichiers qui l'ont déposé, à un script shell avec le nom correspondant. Enregistrez simplement en tant qu'application à partir de Script Scripditor et Renommez comme script.App pour correspondre à votre script.sh https://github.com/pholker/scripts/blob/master/dropscript.scpt
Je voulais aussi faire cela aussi, mais contrairement aux solutions ci-dessus, je voulais produire des paramètres cités pour un script shell. Ces autres méthodes vont bien, mais ils sont un peu comme suggérant "juste commander-V dans le terminal" lorsque ce que vous voulez vraiment, c'est pbpaste
.
Je voulais faire une fonction shell que je peux utiliser dans mes scripts étendus aux paramètres de fichier pour chaque sélection de recherche. J'utilise la coquille de poisson et cela semble fonctionner quelque peu:
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
Utilisé (à nouveau dans la coque de poisson) comme convert-video (selection)
.
Dans une fonction Bash, il peut être nécessaire de citer la sortie avec quelque chose comme | tr '\n' '\0' | xargs -0 printf "%q" {}
À la fin de cette commande Osascript, pas sûr.
(Remarque: tout ce que je sais sur les scripts de AppleScript et Shell avancés J'ai ré-appris au cours des 2 dernières heures et oublieront de demain
Dans Mac OS X, la langue de script préférée est AppleScript. Vous pouvez créer une gouttelette (un script qui fera quelque chose lorsque vous déposez des fichiers sur son icône), placez le script (pouvant être enregistré en tant qu'application) icône sur le bureau et faites glisser les fichiers que vous souhaitez transmettre à la scénario.
Comme alternative, vous pouvez utiliser des actions de dossiers. Il est possible d'associer un AppleScript de script à un dossier qui sera exécuté toutes les fois que certains fichiers (ou répertoires) sont supprimés sur le dossier.
Depuis la découverte - FastScripts (que je recommande vivement), je cherche un moyen d'aller dans l'ensemble et de me débarrasser de l'automatiseur. Donc, je devais avoir un moyen de transmettre les éléments de recherche sélectionnés comme paramètres à la coquille.
Pour cela, j'ai créé un gestionnaire dans ma bibliothèque AppleScript Handlers.scpt
dans ~/Library/Script Libraries
qui renvoie la sélection en tant que pistes POSIX ou HFS, en fonction du Boolean passé.
on getselection(hfs)
set text item delimiters to linefeed
tell application "Finder" to set sel to text items of (selection as text)
if hfs then return sel
repeat with i in sel
set contents of i to POSIX path of i
end repeat
return sel as text
end getselection
De mon script Bash, j'ai lu le résultat du gestionnaire à un tableau. Je passe false
parce que j'ai besoin de pistes de POSIX. Le script sort lorsque le premier élément de la matrice est vide.
#!/usr/local/bin/bash
mapfile -t i < <(osascript -e 'tell script "Handlers" to getselection(false)')
[[ $i ]] || exit 0
whatever-command "${i[@]}"