Encontrar arquivos no Linux com find

Encontrar arquivos no Linux com o find é, sem sombra de dúvidas, a maneira mais simples e útil para quem precisa procurar coisas dentre milhares de arquivos e pastas diferentes. Além de realizar pesquisas simples, find pode ser bastante complexo em alguns casos, para que você possa encontrar algo bastante específico.

Find não faz apenas pesquisas, este comando pode até mesmo executar outros comandos com os arquivos encontrados, como apagar, renomear, listar permissões ou qualquer tipo de comando que você possa desejar executar em todos os arquivos encontrados.

Lembra daquela foto que você estava procurando e nunca encontrou por causa da bagunça das pastas antigas do seu PC? Find encontra pra você! Lembra aquela música que você só sabe o nome do cantor mas não lembra o nome do arquivo? Find encontra pra você também. Você só vai precisar indicar algumas coisas simples e, dependendo da sua criatividade, find irá fazer todo o trabalho duro que seria necessário para encontrar o que você estava procurando.

Observação: Este artigo trará apenas alguns exemplos sobre a utilização do find, porém, caso não encontre o que deseja, digite o seguinte dentro do terminal do Linux:

man find

E verá um manual completo sobre o comando. Então vamos ao que interessa, que é a procura de arquivos e pastas!

Listando todos os arquivos de um diretório

Se você quiser exibir todos os arquivos de um diretório, acesso o mesmo via terminal e digite somente o comando “find”:

find

Você verá todos os arquivos, incluindo arquivos ocultos que estão presentes no diretório.

Caso a lista seja muito grande e você precise percorrer todos os arquivos encontrados, digite:

find | less

Pressione qualquer tecla para passar linha por linha, ou espaço para pular de página. Quando terminar, pressione “q” para sair.

Se precisar listar todos os arquivos dentro de outro diretório, digite:

find /caminho/do/diretorio/

Utilize ” | less” conforme descrito anteriormente para listar todos os arquivos de maneira que você possa navegar por eles.

Encontrar arquivos específicos

Se você precisa encontrar um arquivo específico dentro de um diretório qualquer, digite:

find /caminho/do/diretorio/ -name "nome-do-arquivo.extensao"

O comando “find” diferencia letras maiúsculas e minúsculas, portanto, caso não queira este comportamento, digite:

find /caminho/do/diretorio/ -iname "nome-do-arquivo.extensao"

Agora o comando deverá encontrar tanto arquivos com letras maiúsculas quanto com letras minúsculas que contenham a expressão indicada.

Utilizando metacaracteres

O comando find também suporta metacaracteres, que formam uma espécie de expressão regular caso você não saiba especificamente o nome do arquivo que deseja. Por exemplo, suponhamos que você queira encontrar todas as fotos com extensão .jpg ou .JPG dentro de um diretório. Para isso digite:

find /diretorio/ -iname "*.jpg"

Perceba que o metacaractere “*” (asterisco) significa “qualquer coisa”. Você também pode utilizar o metacaractere “?” (interrogação) para representar um único caractere, veja:

find /diretorio/ -iname "???2015*.jp?"

No trecho acima, find irá encontrar aquivos que contenham qualquer caractere no lugar dos metacaracteres “?”, o número 2015, qualquer coisa depois de 2015, .jp qualquer caractere.

Listagem invertida

Pode ser que você queira fazer uma pesquisa apenas excluindo algo que você não queira, por exemplo, todos menos os que contém o número 2015, veja:

find /diretorio/ ! -iname "*2015*"

O “!” (exclamação), significa “não”. Ele pode ser substituído por “-not” e você terá o mesmo resultado.

Combinando valores

Você também pode combinar valores com “AND” e “OR” (não especificamente utilizando essas palavras). Para utilizar find com “AND”, ou seja, arquivos que contenham um valor “E” outro valor, simplesmente digite:

find /diretorio/ -iname "valor1*" -iname "*valor2*"

Agora somente arquivos que contenham ambos os valores serão encontrados.

Caso queira encontrar arquivos que contenham um valor “OU” (OR) outro valor, digite:

find /diretorio/ -iname "*valor1*" -o -iname "*valor2*"

Agora serão encontrados arquivos com ambos os valores. Note que com “OR” não é necessário que os dois valores estejam presentes no nome do mesmo arquivo.

Diretórios ou arquivos?

Com o find você também pode especificar se deseja encontrar apenas diretórios (pastas) ou apenas arquivos (files), veja:

# Apenas arquivos
find /diretorio/ -iname "valor*" -type f

# Apenas pastas
find /diretorio/ -iname "valor*" -type d

Para pesquisar em várias pastas de uma vez, digite:

find /diretorio1/ /diretorio2/ -iname "valor*"

Encontrando arquivos por permissão

Se você quiser ver arquivos que têm determinada combinação de permissões, digite:

find /diretorio/ -perm 0777

Você pode pesquisar qualquer combinação de permissões que desejar, conforme o chmod. Como exemplo, você poderia procurar por arquivos executáveis com:

find /bin -perm /a=x

Procurar arquivos de usuários e grupos

Quer encontrar arquivos de um usuário ou grupo específico? Digite:

find /diretorio/ -user usuario -group grupo

Você pode utilizar ambas as opções separadamente.

Procurar arquivos baseando-se em tempo

Caso queira encontrar arquivos baseando-se em tempo, siga os exemplos abaixo:

# Encontra arquivos alterados 10 dias atrás 
find / -mtime 10

# Encontra arquivos acessados 10 dias atrás
find / -atime 10

# Para um range, digite
find / -mtime +10 -mtime -10

Procure arquivos por tamanho

Para encontrar arquivos de 50MB, digite:

find / -size 50M

Maiores que 50M:

find / -size +50M

Menores que 50M:

find / -size -50M

Entre 50M e 100M:

find / -size +50M -size -100M

Executando comandos nos arquivos encontrados

Com o “find” você também pode executar comandos nos arquivos encontrados, para isso simplesmente digite:

find / -name "arquivo*" -exec ls -l {} \;

Perceba que o {} significa o caminho do arquivo, e o que vem após “-exec” é o comando a ser executado. Por exemplo, para copiar arquivos, digite:

find /diretorio/ -iname "*arquivo*" -exec cp {} /destino/ \;

Executando como super user

Se você quiser pesquisar pastas das quais você não tem permissões, utilize “sudo”, exemplo:

sudo find / "*.jpg"

Simples assim!

Vídeo tutorial

O vídeo abaixo é um complemento do texto acima:

Link do vídeo: https://youtu.be/VPiNq0jda7Y