Uso seguro do comando find no Ubuntu - Evite acidentes de exclusão
O que você vai aprender
- Buscas básicas com
find(por nome, extensão, data de modificação, tamanho) - Procedimento de exclusão segura (listar primeiro -> verificar contagem -> excluir)
- Práticas seguras com
xargs(-print0/xargs -0)
Resumo rápido
Siga esta ordem para exclusões -- é inegociável:
- Listar primeiro (não excluir)
- Verificar contagem (pare se for mais que o esperado)
- Excluir com segurança (use
-print0/xargs -0sempre que possível)
Pré-requisitos
- SO: Ubuntu
- Shell: bash
- Permissões:
sudoquando necessário (para diretórios do sistema)
1. Básico do find (busca)
Conclusão: Use
findcom-name,-typee-inamepara localizar arquivos antes de filtrar.
1-1. Busca por nome (correspondência exata)
$ find . -name "error.log"
1-2. Busca por extensão (ex: .log)
$ find . -name "*.log"
1-3. Busca sem diferenciar maiúsculas/minúsculas
$ find . -iname "*.log"
1-4. Somente arquivos / somente diretórios
$ find . -type f -name "*.log" # somente arquivos $ find . -type d -name "cache" # somente diretorios
2. Filtrando por data de modificação e tamanho
Conclusão: Combine
-mtimee-size-- condições amplas são a principal causa de acidentes.
2-1. Arquivos modificados nos últimos 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
Útil para encontrar "arquivos pesados" durante investigações de espaço em disco.
3. Antes da exclusão: Listar e contar primeiro
Conclusão: 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 necessário)
$ 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 é maior que o esperado, suas condições são muito amplas. Adicione -mtime ou -size para restringir.
4. Métodos de exclusão segura (padrão para iniciantes)
Conclusão: Use
-print0 | xargs -0para excluir com segurança -- trata nomes de arquivo com espaços.
Exclusão pode causar acidentes instantâneos, então é 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 segurança
Use -print0 e xargs -0 para tratar nomes de arquivo com espaços com segurança.
$ sudo find /var/log -type f -name "*.log" -mtime +30 -print0 | sudo xargs -0 rm -f
-print0: Saída delimitada por null (segura para espaços/quebras de linha)xargs -0: Aceitar entrada delimitada por null corretamente
rm -f é poderoso. Sempre siga a ordem "listar -> contar -> excluir".
-delete pode ser usado? (Resposta: Com cuidado)
find ... -delete é simples mas pode causar acidentes instantâneos se as condições estiverem erradas.
# Use somente se entender os riscos $ sudo find /tmp -type f -mtime +7 -delete
Para iniciantes, domine o padrão -print0 | xargs -0 rm primeiro.
5. Armadilhas comuns (onde acidentes acontecem)
Conclusão: Execute
pwdprimeiro para confirmar a localização -- este único hábito previne a maioria dos acidentes.
Caminho errado (/ vs ./)
find / ...afeta o sistema inteiro - muito cuidado- Sempre verifique o diretório alvo com
pwdelsprimeiro
$ pwd $ ls -la
Condições 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 espaços/quebras de linha quebram
Esta é A razão para usar -print0 / xargs -0.
6. Verificação pós-exclusão
Conclusão: Execute
df -hapós a exclusão para confirmar que o espaço em disco foi realmente recuperado.
Após a exclusão, verifique o uso de disco:
$ df -h