Testando se um arquivo é local

5

Eu preciso testar em um script, se um arquivo é de uma montagem de rede ou realmente local. Para ser mais claro: preciso testar se a análise do conteúdo será rápida ou lenta, mas, no meu caso, a rede local vs é um indicador confiável.

A melhor tentativa que eu fiz é stat -c %m [path] para obter o ponto de montagem para o caminho, que fornece / para arquivos no meu disco local e o ponto de montagem para uma montagem CIFS.

Mas eu suspeito que este não é um diagnóstico confiável além da minha configuração muito simples (uma unidade local, uma partição grande, um par de montagens de rede), então eu gostaria de uma abordagem robusta / canônica. A pesquisa não forneceu pistas úteis; termos como "rede" e "caminho" estão sobrecarregados.

    
por Tom Goodfellow 02.07.2014 / 13:32

1 resposta

1

Você pode produzir o tipo de sistema de arquivos que contém um determinado arquivo ou diretório usando

 stat -f --format="%T" /path/to/file

e tome medidas com base nisso. Algumas saídas possíveis são cifs , nfs , afs ,… (presumido remoto) e ufs , ext2/ext3 (sic-ext2, ext3 e ext4 possuem o mesmo número mágico do sistema de arquivos), btrfs , tmpfs ,… (presumido local).

Uma coisa que pode ajudar você a decidir se um tipo de sistema de arquivos é local ou remoto: GNU coreutils, que inclui stat e df , tem uma noção de sistema de arquivos "local" e "remoto" para algumas dúzias de diferentes sistemas de arquivos tipos.

df -T -l | awk 'NR > 1 { print $2 }' | sort -u

produzirá os tipos de sistema de arquivos de todos os sistemas de arquivos montados que df acredita serem locais.

Como apontado nos comentários sobre a pergunta original, é difícil dizer se um dispositivo de armazenamento é local; um sistema de arquivos ext3 em /dev/sdb5 pode estar em um dispositivo Fibre Channel, que pode ser conectado diretamente ou pode ter vários switches de rede distantes, o que é improvável que você consiga discernir usando utilitários padrão no nível do usuário.

    
por 02.07.2014 / 18:32