Diferença entre rmdir e rm -r

9

Eu costumo excluir diretórios usando rm :

rm -r myDir

No entanto, estou ciente de outro comando, rmdir , que parece fazer o trabalho da mesma forma:

rmdir myDir

Qual é a diferença entre esses dois comandos e quando cada um deve ser usado?

Joe
fonte
2
Seu rmdir funciona se houver arquivos no subdiretório?
Jeff Schaller
1
Consulte também a chamada de sistema de mesmo nome rmdir(2)que pode remover apenas diretórios vazios.
David Foerster
4
A propósito, existe um procedimento "correto" para o uso rm -r: (1) Digite o comando, mas não o insira (2) Afaste as mãos do teclado (3) Conte até cinco (4) Pressione ENTER. Comecei a fazer algo assim com todos os comandos perigosos, para me dar uma chance de olhar para o que estou fazendo, certificar-se de digitar as coisas corretamente, pensar se poderia haver consequências inesperadas etc. Ocasionalmente, isso me leva para apagar meu comando e fazer algumas verificações extras primeiro, por exemplo.
ajb 02/07/19
3
@ajb rm -rf ~ /*- limpa meu diretório pessoal. Ou espere, talvez limpe o sistema. Sempre bom verificar novamente;).
Tom Carpenter
1
@ajb Observe que rmdire rm -rsão duas strings do mesmo comprimento :-)
Kusalananda

Respostas:

14

rm -rremove um diretório e todo o seu conteúdo; rmdirsó removerá um diretório se o diretório estiver vazio. Eu gosto de usar o seguinte para remover um diretório e todo o seu conteúdo:

rm -rf <directory_to_be_removed>
Scott Kayser
fonte
17
Observe que você geralmente não deve usar -fse não precisar. É fácil de usar -rfsempre, mas desativa (quase) todas as verificações de segurança.
allo
5
-1 para recomendação uneccesary de de rm -fbandeira que pode ter, consequências imprevisíveis unrevertable
gato
Então rmdiré só rm -d?
Stan Strum
@StanStrum -dnão é uma opção padrão para rm.
Kusalananda
@cat O rmcomando em geral pode ter essas consequências. O -fsinalizador é útil quando executado set -eem um script. Concordo que usar sem pensar é desnecessário .
Kusalananda
1

Você deve usar rm -rquando quiser remover recursivamente um diretório e todo o seu conteúdo, ou quando o destino puder ser um diretório ou arquivo e desejar excluí-lo, independentemente do que seja.

Você deve usar rmdirquando desejar remover um diretório vazio.

O rmdircomando é útil, pois se recusa a remover diretórios e arquivos não vazios. Isso serve como uma captura de segurança em situações nas quais você pode ter certeza absoluta de que o que está excluindo é um diretório e que o diretório está vazio antes de excluí-lo (por exemplo, em um script) e deseja tratá-lo como uma condição de erro de outra forma.

Kusalananda
fonte