rmdir
exclui apenas um diretório vazio. Para excluir recursivamente, rm -rf
é usado.
- Por que não
rmdir
tem uma opção recursiva? Logicamente, quando estou excluindo um diretório , quero usarrmdir
. - Dado que
rm
é usado para excluir um diretório em todos os casos, exceto no mais simples, por quermdir
existe? A funcionalidade é incluída emrm
.
Isso é apenas um acidente histórico?
Desvincular diretórios era originalmente uma operação privilegiada :
Assim
rmdir
foi implementado como um pequeno binário que apenas removia os diretórios , que na época envolvia a remoção..
e.
dentro do diretório, e depois o próprio diretório.rmdir
foi projetado para ser setuid root; ele executa testes de permissão separados usandoaccess
para determinar se o usuário real tem permissão para remover um diretório. Como qualquer binário raiz setuid, é melhor mantê-lo simples e bem focado.rm -r
realmente usou esse binário separado para excluir diretórios conforme necessário.Parece que a diferença duradoura entre
rm -r
ermdir
é o resultado dessa diferença inicial.Presumivelmente, desde que
rm
adquiriu a capacidade de excluir recursivamente no início, ermdir
deveria ter uma missão muito pequena, nunca foi considerado útil fornecerrmdir
a capacidade de excluir recursivamente.Uma alternativa ao rmdir recursivo (que seria útil) seria algo assim:
Isso removerá apenas diretórios vazios e fornecerá muitos erros inofensivos se alguns deles não estiverem vazios.
Um rmdir recursivo pode ser mais inteligente e abortar uma subárvore quando receber um erro, em vez de continuar recebendo erros em cascata, mas provavelmente não seria mais rápido.
Como apontado, rmdir tem a
-p
opção, que não é exatamente recursiva. E a capacidade de usar find como acima provavelmente removeu a motivação para adicionar uma opção recursiva para ele, pois as vantagens seriam pequenas.