OS X 中有挂载点程序吗?

OS X 中有挂载点程序吗?

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

如果出于某种原因你想真实的挂载点,执行以下操作:

  1. 下载源代码系统初始化这里
  2. src/mountpoint.c在您选择的文本编辑器中打开并添加#include <sys/types.h>
  3. 确保已安装 Xcode 及其命令行工具
  4. 跑步cc mountpoint.c -o mountpoint && sudo cp mountpoint /bin
  5. 可选择复制man/mountpoint.1/usr/share/man/man1

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

相关内容