Do manual:
-f, --força
ignore arquivos inexistentes, nunca avise
-r, -R, --recursivo
remova o conteúdo dos diretórios recursivamente
Embora a descrição desta opção seja diferente, ao tentar excluir uma pasta vazia (sem rmdir para este exemplo) dá o mesmo resultado.
-f
não imprimirá erro nem nada comparado a -r
, essa é a única diferença ou existe um tipo específico de situação em que uma opção é melhor que outra ou situações em que uma dessas opções simplesmente não funciona enquanto a outra funciona?
Responder1
Isto é o que diz a página de manual do CentOS:
-f, --force
ignore nonexistent files, never prompt
-r, -R, --recursive
remove directories and their contents recursively
Pelo que percebi (graças a alguns comentários abaixo), o seguinte é verdadeiro para os sinalizadores -r
e :-f
-r
- exclui recursivamente o conteúdo de um diretório, incluindo arquivos ocultos e subdiretórios
- dependendo da sua configuração, pode pedir permissão (por exemplo, ao usar o
--interactive
sinalizador). Algumas distribuições fazem isso por padrão. - pode ser usado para remover um diretório, se você quiser fazer isso, basta fornecer o caminho do diretório (por exemplo:
/path/to/directory
)
-f
- não exclui recursivamente o conteúdo de um diretório, apenas remove os arquivos que correspondem diretamente ao caminho fornecido (por exemplo
example/file1
ouexample/*
). - Nunca exclui subdiretórios
- Nunca pede permissão, basicamente
yes to all
no Windows
Abaixo estão alguns exemplos, todos eles começam com a seguinte estrutura:
example/
file1
file2
file3
.file
dir/
file1
file2
file3
.file
Ativei a verbosidade e o modo interativo por padrão para esses exemplos. Algumas distros fazem isso, enquanto outras não.
exemplo de empresa
$ rm example
rm: cannot remove `example': Is a directory
Como você pode ver, rm
não remove diretórios por padrão.
exemplo de rm -f
$ rm example -f
rm: cannot remove `example': Is a directory
Usar o -f
sinalizador ainda não permite a remoção de diretórios.
exemplo de rm -r
$ rm example -r
rm: descend into directory `example'? yes
rm: remove regular empty file `example/file3'? yes
removed `example/file3'
rm: remove regular empty file `example/file2'? yes
removed `example/file2'
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
removed `example/dir/file1'
rm: remove directory `example/dir'? yes
removed directory: `example/dir'
rm: remove regular empty file `example/file1'? yes
removed `example/file1'
rm: remove directory `example'? yes
removed directory: `example'
Como você pode ver, é solicitada permissão para cada arquivo e diretório; os arquivos ocultos também são removidos.
rm exemplo/* -f
$ rm example/* -f
rm: cannot remove `example/dir': Is a directory
removed `example/file1'
removed `example/file2'
removed `example/file3'
Aqui, não é solicitada permissão, os diretórios não são excluídos e nem os arquivos ocultos.
rm exemplo/* -r
$ rm example/* -r
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
removed `example/dir/file1'
rm: remove directory `example/dir'? yes
removed directory: `example/dir'
rm: remove regular empty file `example/.file'? yes
removed `example/file'
rm: remove regular empty file `example/file1'? yes
removed `example/file1'
rm: remove regular empty file `example/file2'? yes
removed `example/file2'
rm: remove regular empty file `example/file3'? yes
removed `example/file3'
Aqui, o conteúdo do diretório de exemplo (não o diretório em si) é removido, incluindo arquivos ocultos.
Responder2
rm -r mydir
removerá o mydir
diretório com todo o seu conteúdo.
rm -f mydir
não removerá um diretório (nem vazio nem com conteúdo). Ele reportará um erro:
no BSD/OS X:
rm: mydir/: is a directory
no GNU/Linux:
rm: cannot remove 'mydir': Is a directory
Possíveis explicações para o rm
comando se comportar independentemente dos argumentos fornecidos (do mais ao menos provável):
- você tem um alias de shell
rm
definido e ele passa alguns parâmetros definidos (como-r
) para orm
comando - você está chamando um script chamado
rm
que também passa parâmetros adicionais para o comando real - você tem um
rm
executável personalizado
Você pode verificar as duas primeiras possibilidades executando /bin/rm -f mydir
.