Linux 系统有一个/bin/mountpoint
可用于检查特定目录是否是卷的挂载点的程序。Mac OS X 是否有等效程序,或者是否有其他方法可以运行此检查?
答案1
mount
您可以解析要检查的目录的输出(在 之后on
,用空格括起来)。但是,这无法处理由于符号链接而产生的不同路径。解决方案在这里,但它使这种方法变得复杂。
或者,读取的退出代码diskutil info
,如果它非零,则它不是挂载点。
#!/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
如果出于某种原因你想真实的挂载点,执行以下操作:
答案2
您可以使用df
命令获取任何目录的设备节点和挂载点。要单独获取挂载点,请使用:
df "/path/to/any/dir/you/need" | sed -nE -e' s|^.+% +(/.*$)|\1|p'
此 sed 构造用于获取可能包含路径中的空格的挂载点。请注意 OS X 的 sed 扩展正则表达式选项“-E”的使用,GNU sed 也非正式地支持该选项(作为 GNU sed“-r”选项)。可移植命令:
df "/path/to/any/dir/you/need" | sed -n -e' s|^.*% \{1,\}\(/.*$\)|\1|p'
您可以在 Bash 函数中使用它:
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
}