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:
- Download the sources for sysvinit from here.
- Open
src/mountpoint.c
in a text editor of your choice and add#include <sys/types.h>
- Make sure you have Xcode and its command-line tools installed
- Run
cc mountpoint.c -o mountpoint && sudo cp mountpoint /bin
- 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
}