como verificar o formato de um sistema de arquivos

10

Eu gostaria de verificar, em um script bash, em qual tipo de sistema de arquivos um diretório é.

A ideia é algo como

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if
    
por Dremor 13.09.2015 / 19:38

3 respostas

10

Use df . Você pode passar um caminho e ele fornecerá as informações do sistema de arquivos para esse caminho. Se você precisar do tipo de sistema de arquivos, use a opção -T , desta forma:

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

Para extrair o tipo de sistema de arquivos, você pode analisá-lo (use a opção -P para evitar linhas de quebra df se a parte do dispositivo for muito longa):

$ df -PT test | awk 'NR==2 {print $2}'
ext4

Assim, você pode usar esse valor em uma construção if da seguinte forma:

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

Tenha em atenção que a coluna do dispositivo pode conter espaços (mas é rara), caso em que a análise falhará.

    
por 13.09.2015 / 19:51
12

Em um sistema com o comando stat do GNU instalado (como com qualquer distro Linux padrão), você pode obter o tipo fs para um determinado arquivo sem precisar de qualquer análise usando o comando stat :

stat -f -c %T filename

-f informa stat para fornecer informações sobre o sistema de arquivos em vez do arquivo, e -c %T define o formato de saída para incluir apenas o tipo de sistema de arquivos legível por humanos ( %T ).

Então você poderia usar isso (no bash) como:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat fornecerá mais informações.

    
por 13.09.2015 / 21:08
3

Com findmnt (parte de util-linux ):

findmnt -no fstype -T /path/to/file

Ao usar a opção

-T, --target path
se o caminho não for um arquivo ou diretório de ponto de montagem, findmnt verifica elementos de caminho na ordem inversa para obter o ponto de montagem. As outras duas opções suprimem a linha de cabeçalho: -n, --noheading e selecionam a (s) coluna (s) a ser listada: -o, --output

df de coreutils tem uma opção semelhante --output= para imprimir apenas determinados campos, como fstype , por exemplo:

df --output=fstype /path/to/file

não há opção para remover o cabeçalho, então você terá que enviar a saída para, por exemplo, | sed 1d

    
por 14.09.2015 / 02:10