Ubuntu rm e rmdir

O rm apaga arquivos e o rmdir apaga pastas vazias. São comandos simples, mas são os mais perigosos desta fase: o que o rm apaga não vai para a lixeira. Esta aula ensina a apagar o que você quer, e só isso.

Antes de tudo

No terminal não existe "desfazer". Um rm errado apaga para sempre, sem perguntar. Pratique no terminal simulado desta página ou numa pasta de testes, e só depois na sua pasta pessoal.

Você vai aprender
  • Apagar arquivos com rm e pastas com rmdir e rm -r.
  • Pedir confirmação com -i e -I.
  • Mandar para a lixeira pelo terminal com gio trash.
  • Conferir o que um curinga vai apagar antes de apagar.
  • Os erros que causam desastres com rm -rf, e como evitá-los.

A ideia: apagar é tirar o nome da lista

Lembra que uma pasta é uma lista de nomes (veja ls)? O rm tira o nome dessa lista. O espaço que o arquivo ocupava fica livre para ser reaproveitado. Não há uma etapa "lixeira" no meio, como acontece no app Arquivos.

Como você apagaVai para a lixeira?
Tecla Delete no app ArquivosSim
Shift+Delete no app ArquivosNão
rm ou rmdir no terminalNão
gio trash no terminalSim

rm: apagar arquivos

rm vem de remove, "remover".

rm
O programa que apaga.
a.txt
O arquivo a apagar. Pode ser vários: rm a.txt b.txt.
$ ls
a.txt  b.txt  c.log  foto.jpg  vazia  velho
$ rm a.txt
$ ls
b.txt  c.log  foto.jpg  vazia  velho          « a.txt sumiu, sem nenhum aviso

De novo o silêncio: o rm não confirma nada. Para ver o que ele apagou, use -v:

$ rm -v b.txt
removido 'b.txt'

O que o comando devolve

$ rm nada.txt
rm: não foi possível remover 'nada.txt': Arquivo ou diretório inexistente
$ echo $?
1                       « 1 = algo deu errado
$ rm -f nada.txt
$ echo $?
0                       « com -f, "não existe" não é erro

A opção -f (de force, "forçar") ignora arquivos que não existem e nunca pergunta nada. Ela é útil em scripts, mas tira as suas proteções: use com cuidado.


Pedir confirmação: -i e -I

-i: pergunta a cada arquivo

-i (de interactive, "interativo") pergunta antes de apagar cada um. Responda s para apagar ou n para manter.

$ rm -i notas.txt
rm: remover regular file 'notas.txt'? n          « n: o arquivo continua lá

A pergunta mistura português e inglês ("regular file" = "arquivo comum"). É assim que o Ubuntu 26.04 mostra.

-I: pergunta uma vez só

Com muitos arquivos, responder um a um cansa. O -I (i maiúsculo) pergunta uma vez, e só quando você vai apagar mais de 3 arquivos ou uma pasta inteira:

$ ls
app1.log  app2.log  app3.log  app4.log  app5.log
$ rm -I *.log
rm: remover 5 argumentos? s                « s: os 5 foram apagados
Uma rede de proteção permanente

Adicione alias rm='rm -I' ao seu ~/.bashrc (veja .bashrc, alias, PATH). Ele quase não atrapalha e pode salvar o seu dia.


Apagar pastas

rmdir: só pastas vazias

rmdir vem de remove directory. Ele só apaga pastas vazias, o que o torna seguro: nunca leva conteúdo junto.

$ rmdir vazia
$ rmdir velho
rmdir: falha ao remover 'velho': Directory not empty      « tem arquivos dentro

rm -r: a pasta e tudo o que há dentro

Para apagar uma pasta com conteúdo, o rm precisa de -r (de recursive). Sem ele, o rm se recusa:

$ rm velho
rm: não foi possível remover 'velho': É um diretório
$ rm -rv velho
removido 'velho/x.txt'
removido 'velho/y.txt'
foi removido o diretório: 'velho'
rm
O programa.
-r
Recursivo: entra na pasta e apaga tudo, de dentro para fora.
-v
Mostra cada item apagado.
velho
A pasta.
SituaçãoUse
Pasta vaziarmdir pasta (seguro)
Pasta com conteúdo, confirmandorm -rI pasta
Pasta com conteúdo, vendo o que sairm -rv pasta
Só os arquivos de dentro, mantendo a pastarm pasta/*

Missão: na pasta lixo, apague a pasta vazia com rmdir, a pasta velho com todo o conteúdo, e os arquivos .log. Mantenha foto.jpg. Antes de apagar os .log, confira com echo *.log.


Confira antes de apagar com curingas

O * é expandido pelo shell antes de o rm rodar (veja Curingas). Então você pode ver exatamente o que será apagado trocando rm por echo ou ls:

$ echo *.log
c.log d.log
$ rm -v *.log
removido 'c.log'
removido 'd.log'

Esse hábito, "primeiro echo ou ls, depois rm", evita a maioria dos acidentes.


Usar a lixeira pelo terminal: gio trash

O Ubuntu traz o gio, que conversa com o mesmo sistema de arquivos do desktop. Com ele, o arquivo vai para a lixeira e pode voltar.

gio
Ferramenta do GNOME para arquivos.
trash
O subcomando: mandar para a lixeira.
relatorio-velho.odt
O arquivo (ou pasta, não precisa de -r).
$ gio trash relatorio-velho.odt
$ gio trash --list
trash:///relatorio-velho.odt	/home/ana/Documentos/relatorio-velho.odt
$ gio trash --restore trash:///relatorio-velho.odt
ComandoO que faz
gio trash ARQUIVOManda para a lixeira (arquivos ou pastas)
gio trash --listLista o que está na lixeira e de onde veio
gio trash --restore trash:///NOMEDevolve ao lugar original
gio trash --emptyEsvazia a lixeira (aí sim, apaga para sempre)

Num servidor sem desktop, o gio pode não estar instalado. Há também o pacote trash-cli, com os comandos trash-put, trash-list e trash-restore.


rm -rf: o comando que merece respeito

rm -rf junta "recursivo" com "forçar": apaga a pasta e tudo dentro, sem nenhuma pergunta e sem reclamar de nada. Ele é necessário às vezes, mas um erro pequeno de digitação vira um desastre.

Os erros clássicos
  • Espaço a mais: rm -rf / home/ana/teste (com espaço depois da barra) manda apagar / e home/ana/teste. O Ubuntu bloqueia apagar a raiz, mas um espaço em outro lugar não é bloqueado: rm -rf ~ /teste apaga a sua pasta pessoal inteira.
  • Variável vazia em script: rm -rf "$PASTA"/* com PASTA vazia vira rm -rf /*.
  • Pasta errada: rm -rf * apaga tudo na pasta atual. Se você não está onde pensa, apaga a coisa errada.
  • Com sudo: sudo rm -rf passa por cima de todas as proteções de permissão.

Regras práticas:

  1. Rode pwd antes de qualquer rm com *.
  2. Troque rm por ls e veja o que seria apagado.
  3. Prefira rm -rI a rm -rf quando estiver digitando à mão.
  4. Em scripts, use "${PASTA:?}": o script para se a variável estiver vazia (veja Variáveis).
  5. Tenha backup (veja Backup). É ele que salva você quando todo o resto falha.

Formas diferentes de apagar

FormaComandoQuando usar
Arquivorm arquivoO caso comum.
Com confirmaçãorm -i arquivo / rm -I *.tmpArquivos importantes ou muitos de uma vez.
Pasta vaziarmdir pastaLimpar pastas sem risco de levar conteúdo.
Pasta com tudorm -r pastaVocê tem certeza do que tem dentro.
Para a lixeiragio trash arquivoPode ser que você precise de volta.
Por critériofind . -name "*.tmp" -deleteArquivos espalhados em subpastas (veja find).
App ArquivosDeletePrefere ver antes de apagar.

Quando não funciona

"É um diretório"
$ rm velho
rm: não foi possível remover 'velho': É um diretório

Como resolver: se estiver vazia, rmdir velho; se não, rm -r velho.

"Directory not empty"
$ rmdir velho
rmdir: falha ao remover 'velho': Directory not empty

O que aconteceu: o rmdir só apaga pastas vazias. Às vezes a pasta parece vazia porque só tem arquivos ocultos.

Como confirmar: ls -A velho.

"Permissão negada"
$ rm /etc/hostname
rm: não foi possível remover '/etc/hostname': Permissão negada

O que aconteceu: para apagar um arquivo, você precisa poder escrever na pasta que o contém. /etc é do root.

Como resolver: se tiver certeza absoluta, sudo rm. Apagar arquivos do sistema pode quebrar o Ubuntu.

Apaguei o arquivo errado

O que aconteceu: o rm não usa lixeira.

Como resolver: pare de gravar coisas no disco e restaure do backup. Programas de recuperação (como o testdisk/photorec) às vezes conseguem recuperar, mas não há garantia.

Nome que começa com hífen
$ rm -arquivo.txt
rm: opção inválida -- “a”
Tente "rm ./-arquivo.txt" para remover o arquivo '-arquivo.txt'.
Tente "rm --help" para mais informações.

O que aconteceu: o rm achou que -arquivo.txt era uma opção.

Como resolver: faça como a própria mensagem sugere: rm ./-arquivo.txt, ou rm -- -arquivo.txt.


Referência de opções

OpçãoDescriçãoExemplo
-vMostra cada item apagadorm -v a.txt
-iPergunta antes de cada itemrm -i *.txt
-IPergunta uma vez (mais de 3 itens ou recursivo)rm -I *.log
-rApaga pastas e todo o conteúdorm -r pasta
-fNunca pergunta; ignora o que não existerm -f arq.tmp
-dApaga pastas vazias (como rmdir)rm -d vazia
--Fim das opções (nomes com hífen)rm -- -arq
rmdir -pApaga a pasta e as pastas-mãe, se ficarem vaziasrmdir -p a/b/c

Exercícios

1. Pasta com conteúdo

Complete para apagar a pasta antigos e tudo o que há dentro, mostrando cada item:

rm antigos

2. Conferir antes

Antes de rodar rm *.tmp, qual comando mostra quais arquivos seriam apagados (sem apagar nada)?

3. Para a lixeira

Complete para mandar rascunho.txt para a lixeira:

gio rascunho.txt

4. Qual destes comandos nunca apaga conteúdo junto?

5. O que faz rm -rf ~ /teste (com espaço depois do til)?


Resumo

  • rm apaga arquivos sem lixeira; rm -r apaga pastas com conteúdo; rmdir só apaga pastas vazias.
  • -i pergunta a cada item, -I pergunta uma vez, -v mostra o que saiu.
  • Antes de um rm com curinga, rode o mesmo padrão com echo ou ls.
  • gio trash manda para a lixeira e permite restaurar.
  • rm -rf não perdoa: confira o pwd, os espaços e as variáveis.