Uso seguro do comando find no Ubuntu - Evite acidentes de exclusao
O que voce vai aprender
- Buscas basicas com
find(por nome, extensao, data de modificacao, tamanho) - Procedimento de exclusao segura (listar primeiro -> verificar contagem -> excluir)
- Praticas seguras com
xargs(-print0/xargs -0)
Resumo rapido
Siga esta ordem para exclusoes -- e inegociavel:
- Listar primeiro (nao excluir)
- Verificar contagem (pare se for mais que o esperado)
- Excluir com seguranca (use
-print0/xargs -0sempre que possivel)
Pre-requisitos
- SO: Ubuntu
- Shell: bash
- Permissoes:
sudoquando necessario (para diretorios do sistema)
1. Basico do find (busca)
Conclusao: Use
findcom-name,-typee-inamepara localizar arquivos antes de filtrar.
1-1. Busca por nome (correspondencia exata)
$ find . -name "error.log"
1-2. Busca por extensao (ex: .log)
$ find . -name "*.log"
1-3. Busca sem diferenciar maiusculas/minusculas
$ find . -iname "*.log"
1-4. Somente arquivos / somente diretorios
$ find . -type f -name "*.log" # somente arquivos $ find . -type d -name "cache" # somente diretorios
2. Filtrando por data de modificacao e tamanho
Conclusao: Combine
-mtimee-size-- condicoes amplas sao a principal causa de acidentes.
2-1. Arquivos modificados nos ultimos 7 dias
$ find . -type f -mtime -7
2-2. Arquivos com mais de 30 dias
$ find . -type f -mtime +30
2-3. Arquivos maiores que 100MB
$ find . -type f -size +100M
Util para encontrar "arquivos pesados" durante investigacoes de espaco em disco.
3. Antes da exclusao: Listar e contar primeiro
Conclusao: Sempre conte com
wc -lantes de excluir -- mais resultados que o esperado significa pare.
3-1. Listar arquivos (sem excluir)
Exemplo: Encontrar arquivos .log em /var/log (use sudo se necessario)
$ sudo find /var/log -type f -name "*.log"
3-2. Contar arquivos (pare se forem muitos)
$ sudo find /var/log -type f -name "*.log" | wc -l
Se a contagem e maior que o esperado, suas condicoes sao muito amplas. Adicione -mtime ou -size para restringir.
4. Metodos de exclusao segura (padrao para iniciantes)
Conclusao: Use
-print0 | xargs -0para excluir com seguranca -- trata nomes de arquivo com espacos.
Exclusao pode causar acidentes instantaneos, entao e melhor usar um procedimento fixo.
4-1. Primeiro, restrinja (ex: .log com mais de 30 dias)
$ sudo find /var/log -type f -name "*.log" -mtime +30
4-2. Depois, verifique a contagem
$ sudo find /var/log -type f -name "*.log" -mtime +30 | wc -l
4-3. Se OK, exclua com seguranca
Use -print0 e xargs -0 para tratar nomes de arquivo com espacos com seguranca.
$ sudo find /var/log -type f -name "*.log" -mtime +30 -print0 | sudo xargs -0 rm -f
-print0: Saida delimitada por null (segura para espacos/quebras de linha)xargs -0: Aceitar entrada delimitada por null corretamente
rm -f e poderoso. Sempre siga a ordem "listar -> contar -> excluir".
-delete pode ser usado? (Resposta: Com cuidado)
find ... -delete e simples mas pode causar acidentes instantaneos se as condicoes estiverem erradas.
# Use somente se entender os riscos $ sudo find /tmp -type f -mtime +7 -delete
Para iniciantes, domine o padrao -print0 | xargs -0 rm primeiro.
5. Armadilhas comuns (onde acidentes acontecem)
Conclusao: Execute
pwdprimeiro para confirmar a localizacao -- este unico habito previne a maioria dos acidentes.
Caminho errado (/ vs ./)
find / ...afeta o sistema inteiro - muito cuidado- Sempre verifique o diretorio alvo com
pwdelsprimeiro
$ pwd $ ls -la
Condicoes muito amplas
Apenas *.log pode corresponder a muitos arquivos. Adicione -mtime ou -size para restringir.
Exemplo: Mais de 30 dias E maiores que 10MB
$ sudo find /var/log -type f -name "*.log" -mtime +30 -size +10M
Nomes de arquivo com espacos/quebras de linha quebram
Esta e A razao para usar -print0 / xargs -0.
6. Verificacao pos-exclusao
Conclusao: Execute
df -hapos a exclusao para confirmar que o espaco em disco foi realmente recuperado.
Apos a exclusao, verifique o uso de disco:
$ df -h