Existe um programa de ponto de montagem no OS X?

5

Os sistemas Linux têm um /bin/mountpoint que pode ser usado para verificar se um determinado diretório é um ponto de montagem para um volume. O Mac OS X tem um programa equivalente ou existe alguma outra maneira de executar essa verificação?

    
por Blacklight Shining 27.08.2012 / 21:34

2 respostas

5

Você pode analisar a saída de mount do diretório que deseja verificar (após on , delimitado por espaço em branco). Isso não pode lidar com caminhos diferentes devido a links simbólicos, no entanto. Uma solução está disponível aqui , mas complica essa abordagem.

Como alternativa, leia o código de saída de diskutil info , se for diferente de zero, não é um ponto de montagem.

#!/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

Se, por qualquer motivo, você quiser o ponto de montagem real , faça o seguinte:

  1. Faça download das fontes do sysvinit em aqui .
  2. Abra src/mountpoint.c em um editor de texto de sua escolha e adicione #include <sys/types.h>
  3. Verifique se você tem o Xcode e suas ferramentas de linha de comando instaladas
  4. Executar cc mountpoint.c -o mountpoint && sudo cp mountpoint /bin
  5. Opcionalmente, copie man/mountpoint.1 para /usr/share/man/man1 .
por 27.08.2012 / 22:05
0

Você pode usar o comando df para obter o nó do dispositivo e o ponto de montagem de qualquer diretório. Para obter o ponto de montagem sozinho, use:

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

Esta construção sed é usada para obter o ponto de montagem que pode incluir espaço no caminho. Observe o uso da opção de regexps estendido do OS X '-E', que também é não oficialmente suportada pelo GNU sed (como a opção GNU sed '-r'). Comando portátil:

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

Você pode usá-lo nas funções do bash:

get_mount_point() {
    local result="$(df "$1" | sed -n -e' s|^.*% \{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
}
    
por 30.10.2015 / 11:07