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
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
Respostas:
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á.
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.
Com findmnt(parte de util-linux):
findmnt -no fstype -T /path/to/file
Ao usar a opção
Caminho -T, --targetse 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
findmntferramenta atraente , mesmo com saída TUI de desenho de linha. Obrigado!