Se o número de arquivos a serem excluídos exceder em muito os arquivos deixados para trás, talvez não seja a abordagem mais eficiente para percorrer a árvore de arquivos a serem excluídos e fazer todas essas atualizações do sistema de arquivos. (É análogo a fazer gerenciamento de memória contado por referência desajeitado, visitar todos os objetos em uma árvore grande para descartar sua referência, em vez de transformar tudo indesejado em lixo em uma etapa e depois varrer o que é acessível para limpar.)
Ou seja, clone as partes da árvore que devem ser mantidas em outro volume. Recrie um sistema de arquivos novo e em branco no volume original. Copie os arquivos retidos de volta aos seus caminhos originais. Isso é vagamente semelhante a copiar a coleta de lixo .
Haverá algum tempo de inatividade, mas poderá ser melhor do que o mau desempenho contínuo e a interrupção do serviço.
Pode ser impraticável em seu sistema e situação, mas é fácil imaginar casos óbvios em que este é o caminho a seguir.
Por exemplo, suponha que você queira excluir todos os arquivos em um sistema de arquivos. Qual seria o sentido de recorrer e excluir um por um? Apenas desmonte e faça um "mkfs" por cima da partição para criar um sistema de arquivos em branco.
Ou suponha que você queira excluir todos os arquivos, exceto os meia dúzia de arquivos importantes? Tire meia dúzia de lá e ... "mkfs" por cima.
Eventualmente, há algum ponto de equilíbrio quando há arquivos suficientes que precisam permanecer, que fica mais barato fazer a exclusão recursiva, levando em conta outros custos, como qualquer tempo de inatividade.