Infelizmente, estou sendo forçado a trabalhar com um software que manipula e desmonta automaticamente um volume de rede muito mal. tem uma tendência irritante de deixar um diretório onde estava o ponto de montagem, mas não consegue lidar adequadamente com isso quando monta o volume novamente (é supostamente arrumado, mas muitas vezes não ).
Naturalmente eu estou nos desenvolvedores para corrigir isso, mas enquanto isso eu preciso fazer alguma coisa para arrumar o (s) ponto (s) de montagem.
Então, essencialmente, o que eu preciso fazer é remover o diretório, mas somente se não for atualmente um ponto de montagem (já que não quero excluir o conteúdo do volume por acidente).
Agora, posso obter o ID do dispositivo do diretório e compará-lo ao ID do dispositivo do root com bastante facilidade, mas existe a possibilidade de uma condição de corrida se eu usar essa comparação, ou seja, se o volume estiver montado entre verificando IDs de dispositivos e chamando rm -r /mnt/point
.
Existem alternativas? Fiquei intrigado com a possibilidade de usar a opção find
do comando -xdev
, mas não tenho certeza de como eu realmente forneceria um ponto de comparação, pois find /mnt/point -xdev
não funcionará como destino e seu conteúdo é o mesmo dispositivo.
Além disso, usar rmdir
na suposição de que a pasta restante ficará sempre vazia parece não ser confiável, já que em alguns sistemas um ponto de montagem pode ter um arquivo dentro dele; O macOS, por exemplo, deixa um arquivo .autodiskmounted
dentro dele. Enquanto eu poderia criar uma lista de tais casos e lidar com eles, seria bom (e esperançosamente útil para outros) ter uma solução de propósito mais geral para referência futura, se tal coisa for possível.