5

В системах Linux есть /bin/mountpoint которую можно использовать для проверки того, является ли конкретный каталог точкой монтирования для тома. У Mac OS X есть эквивалентная программа, или есть какой-то другой способ выполнить эту проверку?

2 ответа2

5

Вы можете проанализировать вывод команды 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. Скачать исходники для sysvinit отсюда.
  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 .
0

Вы можете использовать команду df чтобы получить узел устройства и точку монтирования для любого каталога. Чтобы получить только точку монтирования, используйте:

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

Эта конструкция sed используется для получения точки монтирования, которая может включать пространство в пути. Обратите внимание на использование расширенной команды регулярного выражения OS X '-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="$(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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .