Is there a mountpoint program in OS X?

You can parse the output of mount for the directory you want to check (after on, enclosed by whitespace). This can't handle different paths due to symbolic links, though. A solution is available here, but it complicates this approach.


Alternatively, read the exit code of diskutil info, if it's non-zero, it's not a mount point.

#!/usr/bin/env bash
[[ $# -eq 1 ]] || { echo "Exactly one argument expected, got $#" ; exit 1 ; }
[[ -d "$1" ]] || { echo "First argument expected to be directory" ; exit 1 ; }
diskutil info "$1" >/dev/null
RC=$?
if [[ $RC -eq 0 ]] ; then
  echo "$1 is a mount point"
else
  echo "$1 is not a mount point"
fi
exit $RC

If, for whatever reason you want the real mountpoint, do the following:

  1. Download the sources for sysvinit from here.
  2. Open src/mountpoint.c in a text editor of your choice and add #include <sys/types.h>
  3. Make sure you have Xcode and its command-line tools installed
  4. Run cc mountpoint.c -o mountpoint && sudo cp mountpoint /bin
  5. Optionally copy man/mountpoint.1 to /usr/share/man/man1.

You can use df command to get device node and mount point for any directory. To get mount point alone, use:

df "/path/to/any/dir/you/need" | sed -nE -e' s|^.+% +(/.*$)|\1|p'

This sed construct is used to get mount point which may include space in path. Notice usage of OS X's sed extended regexps option '-E', which is also unofficially supported by GNU sed (as GNU sed '-r' option). Portable command:

df "/path/to/any/dir/you/need" | sed -n -e' s|^.*% \{1,\}\(/.*$\)|\1|p'

You can use it in bash functions:

get_mount_point() {
    local result="$(df "$1" | sed -n -e' s|^.*% \{1,\}\(/.*$\)|\1|p' 2>/dev/null)" || return 2
    [[ -z "$result" ]] && return 1
    echo "$result"
}

is_mount_point() {
    [[ -z "$1" ]] && return 2
    [[ "$1" != "$(get_mount_point "$1")" ]] && return 1
    return 0
}