Finder and Terminal are Friends
As developers, we tend to spend a lot of time typing in Terminal windows. Even so, I often find it more helpful to browse directories and files in Finder. I have three little hacks that simplify moving between the two modes.
pwdf
The first hack is a shell function that logs the path of the directory shown by the front-most Finder window.
# pwdf: echoes path of front-most window of Finder pwdf () { currFolderPath=$( /usr/bin/osascript <<" EOT" tell application "Finder" try set currFolder to (folder of the front window as alias) on error set currFolder to (path to desktop folder as alias) end try POSIX path of currFolder end tell EOT ) echo "$currFolderPath" }
I picked up the basic gist of this from a Mac OS X Hints post by Cameron Hayes in the long ago. A much belated thank you to Cameron.
I use zsh
as my shell, so this function is declared in my ~/.zshrc
. (I think the same function declaration would work in .bashrc
, but it’s been six years since I used bash
, so please correct me if I’m wrong.)
Add this function declaration and restart Terminal. Then open a Finder window, switch to Terminal, and type pwdf
. The path to the Finder window’s folder will be logged:
[email protected]% pwdf /Users/curt/Documents/SourceDirs/curtclifton.net/
Where this gets really useful is wrapping the command in backticks to embed the result in other commands. For example, we can count the number of lines in all Swift files in the current Finder window:
[email protected]% wc -l "`pwdf`"*.swift 48 /Users/curt/Documents/SourceDirs/curtclifton.net/BlogGenApp/BlogGenApp/AppDelegate.swift 170 /Users/curt/Documents/SourceDirs/curtclifton.net/BlogGenApp/BlogGenApp/BlogGenModel.swift 488 /Users/curt/Documents/SourceDirs/curtclifton.net/BlogGenApp/BlogGenApp/SwiftyUserDefaults.swift 177 /Users/curt/Documents/SourceDirs/curtclifton.net/BlogGenApp/BlogGenApp/ViewController.swift 22 /Users/curt/Documents/SourceDirs/curtclifton.net/BlogGenApp/BlogGenApp/main.swift 905 total
cdf
One use of pwdf
comes up enough that I created an alias.
alias cdf='cd "`pwdf`"'
Add this to your .zshrc
, being careful to get all the quotes and ticks leaning the right directions. Restart Terminal and then type cdf
at a prompt to change your working directory to that of the front-most Finder window. I find this super handy when I’ve browsed through directories in a Finder window and want to work some Terminal magic on the files therein. Just ⌘-Tab to Terminal, type cdf
, and go to town.
open .
Sometimes I want to move in the opposite direction, opening a Finder window on the directory that I’m working within in Terminal. The built-in Mac system command open
solves this problem. If you pass a directory as the argument to open
, it opens a Finder window. So, to start browsing your current working directory just:
[email protected]% open .
Sometimes little hacks like these can make a big difference over time. And I get a real kick out of the fact that pwdf
combines zsh
and AppleScript.
What are your favorite little hacks? What do you like about them?