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.
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.
- Apagar arquivos com
rme pastas comrmdirerm -r. - Pedir confirmação com
-ie-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ê apaga | Vai para a lixeira? |
|---|---|
| Tecla Delete no app Arquivos | Sim |
| Shift+Delete no app Arquivos | Não |
rm ou rmdir no terminal | Não |
gio trash no terminal | Sim |
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
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ção | Use |
|---|---|
| Pasta vazia | rmdir pasta (seguro) |
| Pasta com conteúdo, confirmando | rm -rI pasta |
| Pasta com conteúdo, vendo o que sai | rm -rv pasta |
| Só os arquivos de dentro, mantendo a pasta | rm 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
| Comando | O que faz |
|---|---|
gio trash ARQUIVO | Manda para a lixeira (arquivos ou pastas) |
gio trash --list | Lista o que está na lixeira e de onde veio |
gio trash --restore trash:///NOME | Devolve ao lugar original |
gio trash --empty | Esvazia 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.
- Espaço a mais:
rm -rf / home/ana/teste(com espaço depois da barra) manda apagar/ehome/ana/teste. O Ubuntu bloqueia apagar a raiz, mas um espaço em outro lugar não é bloqueado:rm -rf ~ /testeapaga a sua pasta pessoal inteira. - Variável vazia em script:
rm -rf "$PASTA"/*comPASTAvazia virarm -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 -rfpassa por cima de todas as proteções de permissão.
Regras práticas:
- Rode
pwdantes de qualquerrmcom*. - Troque
rmporlse veja o que seria apagado. - Prefira
rm -rIarm -rfquando estiver digitando à mão. - Em scripts, use
"${PASTA:?}": o script para se a variável estiver vazia (veja Variáveis). - Tenha backup (veja Backup). É ele que salva você quando todo o resto falha.
Formas diferentes de apagar
| Forma | Comando | Quando usar |
|---|---|---|
| Arquivo | rm arquivo | O caso comum. |
| Com confirmação | rm -i arquivo / rm -I *.tmp | Arquivos importantes ou muitos de uma vez. |
| Pasta vazia | rmdir pasta | Limpar pastas sem risco de levar conteúdo. |
| Pasta com tudo | rm -r pasta | Você tem certeza do que tem dentro. |
| Para a lixeira | gio trash arquivo | Pode ser que você precise de volta. |
| Por critério | find . -name "*.tmp" -delete | Arquivos espalhados em subpastas (veja find). |
| App Arquivos | Delete | Prefere ver antes de apagar. |
Quando não funciona
$ 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.
$ 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.
$ 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.
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.
$ 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ção | Descrição | Exemplo |
|---|---|---|
-v | Mostra cada item apagado | rm -v a.txt |
-i | Pergunta antes de cada item | rm -i *.txt |
-I | Pergunta uma vez (mais de 3 itens ou recursivo) | rm -I *.log |
-r | Apaga pastas e todo o conteúdo | rm -r pasta |
-f | Nunca pergunta; ignora o que não existe | rm -f arq.tmp |
-d | Apaga pastas vazias (como rmdir) | rm -d vazia |
-- | Fim das opções (nomes com hífen) | rm -- -arq |
rmdir -p | Apaga a pasta e as pastas-mãe, se ficarem vazias | rmdir -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:
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:
4. Qual destes comandos nunca apaga conteúdo junto?
5. O que faz rm -rf ~ /teste (com espaço depois do til)?
Resumo
rmapaga arquivos sem lixeira;rm -rapaga pastas com conteúdo;rmdirsó apaga pastas vazias.-ipergunta a cada item,-Ipergunta uma vez,-vmostra o que saiu.- Antes de um
rmcom curinga, rode o mesmo padrão comechoouls. gio trashmanda para a lixeira e permite restaurar.rm -rfnão perdoa: confira opwd, os espaços e as variáveis.