Eu não acredito que exista alguma maneira de determinar se um sistema de arquivos é remoto ou local usando apenas interfaces POSIX. O POSIX nem mesmo exige um comando mount
, e todas as referências a sistemas de arquivos, até onde eu sei, estão repletas das palavras "implementação definida".
O comando -local
primary para o comando find
não ajuda muito, pois está disponível apenas no Solaris e depende da existência de um arquivo de configuração que lista os tipos de sistemas de arquivos remotos.
POSIX manda um comando df
e requer um formato de saída específico se esse comando for usado com o -P
flag; nesse formato, existem seis campos separados por espaços, dos quais o primeiro é o "nome do sistema de arquivos, em um formato definido pela implementação" e o último é o ponto de montagem.
O que você precisa é de uma lista de todos os pontos de montagem correspondentes aos sistemas de arquivos locais. Aqui, acho que você vai ter que voltar para uma heurística; que é excluir nomes de sistemas de arquivos que "pareçam" sistemas de arquivos remotos. Alguns exemplos:
//... CIFS (Samba)
host:... NFS
/afs AFS
Isso não é uma lista exaustiva, e vem completamente sem garantias.
Se você filtrar essas linhas da saída de df
e, em seguida, remover as cinco primeiras colunas, poderá alimentar a lista com o comando find
com -xdev
primary.
Mesmo que isso pareça plausível, na verdade não há garantia de que um sistema de arquivos é realmente "montado" (ver AFS) ou que um sistema de arquivos é totalmente local ou totalmente remoto (um sistema de arquivos baseado em fusível pode redirecionar arbitrariamente arquivos individuais). Então proceda com cautela, é meu conselho.