How to execute a shell script with selected files/folders in finder?

The easiest, built-in way to do this is to just drag the items from Finder to a Terminal window. When you drop them, Terminal will “type” their (escaped) pathnames. You can then use your shell's command line editing to enter the rest of the command. Or if you are thinking ahead, you can type the command first then drag in the items.

The “drag first” version:

  1. Select and drag some Finder items to a Terminal window that is showing a shell prompt. Terminal will insert the (escaped) pathnames.
  2. Type Control+A (go to the beginning of the line; ⌃A is the default, but varies by shell/configuration).
  3. Type your command and a space (it will be inserted before the pathnames).

The “thinking ahead” version:

  1. In any order, do both:
    • In a Terminal window, type the initial part of your command and space (everything except the pathnames).
    • Select some items in Finder.
  2. Drag the selected items from Finder to the Terminal window where you typed the command.
  3. Activate the Terminal window and press Return.

You can (as other answers have indicated) turn to AppleScript or Automator if you need more a more automated solution. Since the extra “moving parts” can add some complexity to the solution, you will have to weigh the benefits of the above process (manual, but flexible) against the the complexity of implementing one or more of the automated solutions.

Some of the automation possibilities include:

  • an AppleScript droplet application
  • a plain AppleScript program launched by the built-in script menu or other launcher
    • get pathnames from Finder's selection
  • an Automator workflow, application, or Finder plug-in
  • an executable .command file (usually a shell script; open in Finder to run it in Terminal)
    • get pathnames from Finder's selection (via osascript)
  • some third-party tool that already provides the functionality you need

I don't think there is a way to do this directly. You can build an "Automator" application that will do some of what you are seeking. This shows what the Automator stack would look like:

enter image description here

Save the result as an Application, then in the finder select the files, right-click and select "Open with" then pick your application. (You may need to select "Other..." at the bottom of the application list.)

You don't get to interact with the script with this method, but you can loop over the files to perform some shell script.


Services are how osx handles this sort of thing.

Under the Application Menu (in this case 'Finder') there is (almost) always a Services menu option which will provide Services that apply to the current Application and its current state. Typically the state is what type of object is selected (text, files/folders, etc).

They can be enabled, disabled, and assigned keyboard shortcuts in the System Preferences panel that only makes sense for the last of those three, Keyboard.

keyboard shortcuts

To make a Service that applies a shell script to files/folders in Finder:

Launch automator and make a new Service type document.

New Service

  • set the type of object the Service applies to (files or folders)
  • set the Application in which the Service is available (finder)
    • Alternatively there is a Get Selected Finder Items action.
  • add an action of Run Shell Script
  • decide if you want the input as arguments or stdin

It should look something like this:

example shell script

automator will automatically place it in your ~/Library/Services folder when you save which will make it available (almost) immediately via the Application -> Services menu, or the contextual (right click) menu.

test folders

resulting TextEdit document