Guia Completo do Comando find no Linux

Visão Geral

No ambiente Linux, encontrar e processar arquivos desejados rapidamente é uma habilidade fundamental e indispensável para a administração de servidores e o desenvolvimento. Neste artigo, exploraremos passo a passo, por meio de práticas, desde as opções básicas de busca do comando find até buscas baseadas no tamanho e tempo de modificação de arquivos, além de operações em lote com os resultados da busca (-exec).

Configuração do Ambiente Prático e Busca Básica por Nome de Arquivo

Para criar um diretório dedicado aos testes práticos do comando find e acessar este local, execute o comando mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab.

mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab

Para gerar arquivos de exemplo com diversas extensões que serão usados nos testes de busca, execute o comando touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak.

touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak

O comando find busca recursivamente por todos os arquivos e diretórios abaixo do caminho especificado de acordo com os critérios definidos.
Ao executar o comando find . -name "*.log", todos os arquivos que terminam com a extensão .log a partir do diretório atual (.) serão localizados e exibidos juntamente com seus caminhos.
Neste momento, para evitar que o caractere curinga (*) seja expandido previamente pelo shell, o padrão de busca é delimitado entre aspas duplas.
⚙️ [Principais Opções]

-name : Busca itens correspondentes ao nome de arquivo ou padrão especificado, diferenciando maiúsculas de minúsculas (case-sensitive).
-iname : Busca itens correspondentes ao nome de arquivo ou padrão especificado, sem diferenciar maiúsculas de minúsculas (case-insensitive).
-type : Especifica o tipo de arquivo a ser pesquisado (f para arquivo comum, d para diretório).
-size : Busca com base no tamanho do arquivo (+ para maior que, - para menor que).
-mtime : Busca por condição baseada no tempo de modificação do conteúdo do arquivo (em unidades de dias).
-empty : Busca arquivos vazios ou diretórios vazios.
-exec : Executa em lote o comando Linux especificado para cada arquivo encontrado.
-delete : Exclui imediatamente os arquivos que correspondem aos critérios de busca.

find . -name “*.log”

Para buscar o nome de arquivo ignorando a distinção entre maiúsculas e minúsculas, utilize a opção -iname executando o comando find . -iname "GUIDE.TXT".
Mesmo que o nome real do arquivo esteja em letras minúsculas (guide.txt), ele corresponderá ao critério de busca em maiúsculas e o caminho do arquivo será retornado normalmente.

find . -iname “GUIDE.TXT”

Localizando Arquivos Grandes por Tipo e Tamanho

Para testar a busca por critérios de tamanho de arquivo, execute o comando truncate -s 15M ~/find_lab/backup/large_archive.iso para criar um arquivo de exemplo grande com 15MB de tamanho.

truncate -s 15M ~/find_lab/backup/large_archive.iso

Para uma prática adicional de comparação de tamanho, execute o comando truncate -s 2M ~/find_lab/logs/big_trace.log gerando um arquivo de log de exemplo com 2MB.

truncate -s 2M ~/find_lab/logs/big_trace.log

Para filtrar e buscar apenas caminhos de diretórios, excluindo arquivos comuns, execute o comando find ~/find_lab -type d aplicando a opção -type d.
Apenas a lista de todos os diretórios presentes sob o caminho especificado será exibida de forma limpa.

find ~/find_lab -type d

Para localizar arquivos comuns (-type f) maiores que 10MB (-size +10M) e verificar suas informações detalhadas, execute o comando find ~/find_lab -type f -size +10M -exec ls -lh {} +.
O arquivo large_archive.iso de 15MB correspondente à condição é encontrado e exibido com detalhes de permissões e tamanho.

find ~/find_lab -type f -size +10M -exec ls -lh {} +

Localizando Arquivos Modificados com Base em Tempo (mtime/mmin)

Para a prática de busca de arquivos com base no tempo decorrido, execute o comando touch -d "2 days ago" ~/find_lab/backup/old_backup.tar para criar um arquivo de exemplo modificado há dois dias.

touch -d “2 days ago” ~/find_lab/backup/old_backup.tar

Para testar a busca por arquivos recentes modificados, execute o comando touch ~/find_lab/logs/recent.log gerando um arquivo de exemplo com o timestamp atual.

touch ~/find_lab/logs/recent.log

Para buscar arquivos comuns modificados nas últimas 24 horas, execute o comando find ~/find_lab -type f -mtime -1 com a opção -mtime -1.
A lista de todos os arquivos criados ou modificados dentro do período estipulado (24 horas) será exibida com sucesso.

find ~/find_lab -type f -mtime -1

Para buscar arquivos antigos cuja modificação ultrapassou 24 horas (1 dia), execute o comando find ~/find_lab -type f -mtime +1 aplicando a opção -mtime +1.
Apenas o arquivo old_backup.tar, criado com a data de dois dias atrás, será filtrado e exibido com precisão.

find ~/find_lab -type f -mtime +1

Controle em Lote dos Resultados de Busca: Opção -exec e Exclusão

Para realizar a prática de manipulação em lote e alteração de permissões, crie um diretório temporário e arquivos temporários de exemplo executando o comando mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp.

mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp

Para alterar em lote as permissões de acesso de todos os arquivos com extensão .tmp encontrados para 644, execute o comando find ~/find_lab/temp -name "*.tmp" -exec chmod 644 {} \; aplicando a opção -exec.
O símbolo {} é substituído pelo caminho de cada arquivo individual encontrado, e \; indica o término do comando passado à cláusula -exec.

find ~/find_lab/temp -name “*.tmp” -exec chmod 644 {} ;

Para verificar se a alteração de permissões foi aplicada corretamente, execute o comando ls -l ~/find_lab/temp.
Na saída, é possível confirmar que ambos os arquivos temporários foram alterados para permissões de leitura e escrita (-rw-r--r--, 644).

ls -l ~/find_lab/temp

Para excluir em lote os arquivos .tmp que atendem aos critérios de busca, execute o comando find ~/find_lab/temp -name "*.tmp" -exec rm -f {} \; combinando-o com o comando rm -f.
Sem necessidade de confirmação adicional, os arquivos correspondentes serão removidos de uma só vez.

find ~/find_lab/temp -name “*.tmp” -exec rm -f {} ;

Para a confirmação final de que todos os arquivos temporários foram excluídos com sucesso, execute o comando ls -la ~/find_lab/temp.
Apenas o diretório atual (.) e o diretório pai (..) permanecem, demonstrando que todos os arquivos temporários criados foram completamente removidos.

ls -la ~/find_lab/temp

Até aqui, resumimos desde as opções essenciais de busca do comando find no Linux até técnicas de processamento em lote prontas para uso no dia a dia.
Experimente combinar as opções apresentadas de acordo com as suas necessidades para gerenciar e pesquisar arquivos com muito mais eficiência.