ファインダーで選択したファイル/フォルダーでシェルスクリプトを実行する方法は?


13

私はnautilusやdolphinのファイルセットに対してスクリプトを実行するのが簡単なLinuxから来ていますが、OSXでこれが簡単ではないことに驚きました。

できれば、ファインダー内の一部をCtrlキーを押しながらクリックし、スクリプトを選択し、進行状況やユーザーの操作を表示するターミナルウィンドウをポップアップ表示できるようにしたいと思います。

回答:


8

これを行う最も簡単な組み込み方法は、項目をFinderからターミナルウィンドウにドラッグするだけです。それらをドロップすると、ターミナルは(エスケープされた)パス名を「タイプ」します。その後、シェルのコマンドライン編集を使用して、残りのコマンドを入力できます。または、先に考えている場合は、最初にコマンドを入力してからアイテムをドラッグできます。

「最初のドラッグ」バージョン:

  1. いくつかのFinderアイテムを選択して、シェルプロンプトが表示されているターミナルウィンドウにドラッグします。端末は(エスケープされた)パス名を挿入します。
  2. Control+を入力しますA(行の先頭に移動します。⌃Aがデフォルトですが、シェル/構成によって異なります)。
  3. コマンドとスペースを入力します(パス名の前に挿入されます)。

「先を考える」バージョン:

  1. 任意の順序で、両方を実行します。
    • では、ターミナルウィンドウ、あなたのコマンドと空間の最初の部分(パス名を除くすべて)を入力します。
    • Finderでいくつかのアイテムを選択します。
  2. 選択したアイテムをFinderからコマンドを入力したターミナルウィンドウにドラッグします。
  3. ターミナルウィンドウをアクティブにし、を押しReturnます。

より自動化されたソリューションがさらに必要な場合は、(他の回答が示しているように)AppleScriptまたはAutomatorを使用できます。追加の「可動部品」はソリューションに多少の複雑さを追加する可能性があるため、1つ以上の自動化ソリューションの実装の複雑さに対して、上記のプロセス(手動でありながら柔軟性)の利点を比較検討する必要があります。

自動化の可能性には次のものがあります。

  • AppleScriptドロップレットアプリケーション
  • 組み込みのスクリプトメニューまたはその他のランチャーによって起動される単純なAppleScriptプログラム
    • Finderの選択からパス名を取得する
  • Automatorワークフロー、アプリケーション、またはFinderプラグイン
  • 実行可能.commandファイル(通常はシェルスクリプト、オープン中のFinderでそれを実行するためのターミナル
    • Finderの選択からパス名を取得(osascript経由)
  • 必要な機能を既に提供しているサードパーティツール

7

これを直接行う方法はないと思います。探しているもののいくつかを実行する「Automator」アプリケーションを構築できます。これは、Automatorスタックがどのようになるかを示しています。

ここに画像の説明を入力してください

結果をアプリケーションとして保存し、ファインダーでファイルを選択し、右クリックして「アプリケーションから開く」を選択し、アプリケーションを選択します。(アプリケーションリストの下部にある[その他...]を選択する必要がある場合があります。)

このメソッドを使用してスクリプトを操作することはできませんが、ファイルをループしてシェルスクリプトを実行できます。


ファイルをアプリケーションアイコンの上にドラッグアンドドロップするとさらに簡単です。
キアムルノ

5

サービスは、がこの種のことを処理する方法です。

アプリケーションメニュー(この場合は「Finder」)にはServices、現在のアプリケーションその現在の状態に適用されるサービスを提供するメニューオプションが(ほぼ)常にあります。通常、状態は、選択されているオブジェクトのタイプ(テキスト、ファイル/フォルダーなど)です。

これらは、システム環境設定パネルで有効化、無効化、およびキーボードショートカットを割り当てることができます。このパネルは、これら3つの最後の3つだけで意味がありKeyboardます。

キーボードショートカット

シェルスクリプトをFinderのファイル/フォルダーに適用するサービスを作成するには:

オートマを起動して、新しいServiceタイプのドキュメントを作成します。

新サービス

  • サービスが適用されるオブジェクトのタイプを設定します(files or folders
  • サービスが利用可能なアプリケーションを設定します(
    • または、Get Selected Finder Itemsアクションがあります。
  • のアクションを追加 Run Shell Script
  • 入力を引数または入力として使用するかどうかを決定します

次のようになります。

シェルスクリプトの例

は、~/Library/Services保存時にフォルダに自動的に配置し、Application -> Servicesメニューまたはコンテキスト(右クリック)メニューから(ほぼ)すぐに使用できるようにします。

テストフォルダー

結果のTextEditドキュメント



1

Mac OS Xでは、優先されるスクリプト言語はApplescriptです。ドロップレット(アイコンの上にファイルをドロップすると何かをするスクリプト)を作成し、デスクトップ上にスクリプト(アプリケーションとして保存できる)アイコンを配置し、渡すファイルをドラッグアンドドロップできます。脚本。

別の方法として、フォルダアクションを使用できます。一部のファイル(またはディレクトリ)がフォルダーにドロップされるたびに実行されるフォルダーにスクリプトApplescriptを関連付けることができます。


1

私もそれをやりたいと思っていましたが、上記の解決策とは異なり、シェルスクリプトの引用されたパラメーターを作成したかったのです。これらの他の方法は問題ありませんが、実際に必要なのは「ターミナルへのcommand-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とシェルスクリプトについて知っていることはすべて、過去2時間で再学習しましたが、明日には忘れられます)


最近bashでこれを行おうとして失敗しましたが、ここsupersuper.com/questions/1353966で尋ねて、答えられました:いいえ、できません:^(失ったバッシュ、私の仕事のMacでも魚の殻に切り替えます。注上記のChris Johnsen氏が言及したドラッグツーファインダトリックを非常に多く使用していること
ピエールヒューストン

1

上記の答えに基づいて、私はこのものを構築しました

https://github.com/commonpike/DropShell

基本的に、アプリにあるシェルファイルを、ドロップされたファイルを引数として呼び出すapplescriptアプリです。必要に応じてシェルスクリプトを変更できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.