como verificar o formato de um sistema de arquivos

11

Gostaria de verificar, em um script bash, em que 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
Dremor
fonte
Deseja o ponto de montagem ou o tipo de sistema de arquivos? Qual seria a sua saída desejada?
terdon

Respostas:

11

Use df. Você pode passar um caminho para ele, e ele fornecerá as informações do sistema de arquivos para esse caminho. Se você precisar do tipo de sistema de arquivos, use o -Tswitch da seguinte maneira:

$ 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 -Popção para evitar dfquebras de linhas se a parte do dispositivo for muito longa):

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

Então você pode usar esse valor em uma ifconstrução como esta:

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

Lembre-se de que a coluna do dispositivo pode conter espaços (mas é raro); nesse caso, a análise falhará.

marinus
fonte
12

Em um sistema com o comando stat GNU instalado (como em qualquer distribuição Linux padrão), é possível obter o tipo fs para um determinado arquivo sem exigir nenhuma análise usando o statcomando:

stat -f -c %T filename

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

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

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

man stat fornecerá mais informações.

rici
fonte
3

Com findmnt(parte de util-linux):

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

Ao usar a opção

Caminho -T, --target
se o caminho não for um arquivo ou diretório de ponto de montagem, findmntverifique os elementos do caminho na ordem inversa para obter o ponto de montagem. As outras duas opções suprimem a linha do cabeçalho: -n, --noheadinge selecione a (s) coluna (s) a serem listadas:-o, --output


dffrom coreutilstem uma opção semelhante --output=para imprimir apenas determinados campos, como fstypepor exemplo:

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

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

don_crissti
fonte
Uma findmntferramenta atraente , mesmo com saída TUI de desenho de linha. Obrigado!
Incnis Mrsi