9

Linux systems have a /bin/mountpoint which can be used to check if a particular directory is a mount point for a volume. Does Mac OS X have an equivalent program, or is there some other way to run this check?

2 Answers2

8

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.
Daniel Beck
  • 111,893
2

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
    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 }

huyz
  • 426