Aprendendo a usar o comando Find

Share

O GNU/Linux tem algumas ferramentas para buscas no sistema bem interessantes. Algumas simples de usar, como o comando “locate”, que após atualizarmos a base de dados do programa com o comando # updatedb, ele encontra facilmente arquivos espalhados em nosso sistema.

Ok, e se eu quiser uma busca mais refinada. Algo tipo ordenar minha busca por data, por tamanho de arquivo, com exceção de algum diretório, enfim, se eu quiser efetuar uma busca um pouco mais específica, deveremos usar nosso amigo “find”.

A primeira dica, que não é só pro find mas para qualquer coisa no Linux, é aprender a usar as man pages. No caso do find você pode encontrá-la com # man find. E para uma consulta rápida, sem muitos detalhes # find -h

Vamos aos exemplos de uso do find:

 

Procurando arquivos por tamanho

 

# find / -type f -exec du {} \; 2>/dev/null | sort -n | tail -n 10 | xargs -n 1 du -h 2>/dev/null

Neste caso estamos procurando os 10 maiores arquivos em nosso sistema, e estamos ordenando-os de menor para maior

Este comando é uma pesquisa de “força bruta” no sistema de arquivos inteiro e pode demorar alguns minutos para ser executado. Claro que você pode modificar o comando para procurar o que quer no diretório que você deseja, por exemplo, use find /var/ para caçar arquivos de log gigantescos.

 

 

Procurando arquivos alterados recentemente

Você pode facilmente encontrar todos os arquivos em seu sistema que foram alterados nos últimos cinco minutos:

# find / -mmin -5 -type f

 

E se eu quisesse os alterados entre 10 e 20 minutos?

# find / -mmin +10 -mmin -20 -type f

 

 

Pesquisando em vários diretórios

Você pode fazer pesquisar arbitrárias em vários diretórios assim:

# find /etc /var /mnt /media -xdev -mmin -5 -type f

A variável -xdev limita a pesquisa ao sistema de arquivos você está dentro não entra em qualquer sistema de arquivos montado. Isto é interessante para evitar sair vagando por compartilhamentos de rede e dispositivos removíveis.

 

Excluindo Diretórios

# find / \( -name proc -o -name sys \) -prune -o -type f -mmin -1

O primeiro parâmetro é onde começar a busca (“/”) e o segundo é “onde não procurar” (/proc e /sys).

 

Procurando arquivos por extensão

 

Esse é fácil:

# find . -name "*.png" -o -name "*.jpg" -o -name "*.gif" -type f

Use a opção -name para procurar em qualquer parte do nome do arquivo. Por exemplo, para encontrar mysong.ogg você poderia procurar por mys *, ou qualquer parte dele, usando curingas de shell normalmente. Use -iname para uma busca case-insensitive.

 

São várias as opções do find, se quiser saber um pouco mais sobre o find e alguns outros comando como o “grep” e o “awk”, leia este tutorial aqui.