Comando find no linux: 15 exemplos para encontrar arquivos

Compartilhe:

Tela do monitor exibindo terminal linux com vários exemplos de execução do comando find buscando arquivos no sistema

Quando a necessidade é encontrar arquivos e diretórios, find é um dos comandos linux mais úteis e importantes usados no terminal.

Diferente de buscas gráficas, o comando find no linux permite combinar filtros avançados, tudo em uma única linha de comando.

Se você trabalha com servidores linux ou é apenas um usuário de desktop, acredite, saber usar o comando find pode economizar muito tempo em algumas tarefas.

Para entender como funciona o comando find e fazer buscas simples e avançadas por arquivos e diretórios a seguir tem 15 exemplos práticos usando o find.

Como funciona o comando find no linux ?

O comando find no linux procura em uma árvore de diretórios por arquivos e/ou diretórios usando critérios de busca.

A pesquisa é feita a partir de um diretório inicial (origem da pesquisa) e o find percorre o diretório recursivamente para encontrar arquivos e/ou diretórios que atendam ao critério de busca, caso encontre, o comando find executa uma ação.

Está se perguntado: O que são critérios e ações do comando find ?

A seguir é explicada a sintaxe do comando find e respondido o que são critérios e ações.

Qual é a sintaxe do comando find no linux ?

Para executar o comando find no linux é importante saber sua sintaxe, que é:

Explicação:

origem da pesquisa – é o diretório onde é originada a pesquisa, que por padrão é recursiva.

opções – Aqui são definidos os critérios de pesquisa usando opções. Os critérios filtram o que será pesquisado com base nas características dos arquivos e diretórios.

expressão – Define a ação que será tomada com os arquivos e/ou diretórios que atenderem aos critérios de pesquisa. A ação padrão é exibir na tela o que casar com os critérios de busca.

Agora que aprendeu como funciona o comando find e sabe a sintaxe é hora de colocar em prática o conhecimento com exemplos úteis tanto para iniciantes quanto para usuários avançados.

1. Encontrar somente arquivos pelo nome

Para buscar somente arquivos regulares e que tenham um nome específico, use as opções -type e -name.

A opção -type especifica o tipo de arquivo buscado, consulte a tabela a seguir para saber os tipos de arquivos que o find pode buscar:

Tipo de ArquivoDescrição
b (block)Arquivo de bloco, representa dispositivos de armazenamento, como: HD e SSD.
c (character)Arquivo de caractere, representa dispositivos como: mouse, teclado, webcam.
d (directory)Diretório
p (named pipe)Arquivo named PIPE, também conhecido como FIFO.
f (regular file)Arquivo regular, como: vídeos, imagens e arquivos de texto.
l (symbolic link)Link simbólico.
s (socket)Arquivo de socket.

A opção -name especifica o nome exato do arquivo ou diretório buscado.

Por exemplo, para encontrar no diretório /etc somente arquivos regulares e nomeados como grub, execute:

Para encontrar somente arquivos que iniciam ou terminam com uma palavra como grub, por exemplo, use o mesmo comando, mas com o caractere * (asterisco). Veja o exemplo:

Adicione sempre o caractere * (asterisco) no fim quando precisar complementar com zero ou mais caracteres a palavra pesquisada.

E inclua o caractere * (asterisco) no início quando precisar que palavra inicie com zero ou mais caracteres, mas que termine com a palavra pesquisada.

Exemplo, para procurar arquivos com extensão “.png” em /usr:

2. Encontrar somente diretórios pelo nome

Para buscar diretórios pelo nome use as opções -type e -name. Por exemplo, para encontrar diretórios que se chamam kernel dentro de /etc, execute:

A ação padrão do comando find é exibir o que foi encontrado na tela, mas existem outras ações.

Por exemplo, pode-se usar a ação -ls (opção) que além de exibir na tela o que foi encontrado com base nos critérios de busca, também exibe propriedades, como: permissões, usuário e grupo proprietário. Basta executar o mesmo comando com -ls no final:

3. Encontrar arquivos pelo nome usando case insensitive

Já precisou encontrar arquivos pelo nome mas sem distinguir letras MAIÚSCULAS e minúsculas (case insentive) no linux ?

Execute o comando find e utilize a opção -iname, que faz o mesmo que a opção -name, a diferença é que -iname não distingue letras MAIÚSCULAS e minúsculas. Veja o exemplo a seguir:

A busca no exemplo, foi feita no diretório corrente, por isso tem o caractere.” após o comando find. O resultado são dois arquivos, um nomeado com letras MAIÚSCULAS e o outro com minúsculas.

4. Limitar profundidade de pesquisa

O comando find no linux faz buscas recursivas, mas e se precisar limitar a profundidade da busca ? A resposta é utilize a opção global -maxdepth.

A opção -maxdepth limita até quantos níveis de subdiretórios o find deve ir para encontrar o que está procurando.

Para buscar arquivos executáveis para o usuário atual somente dentro de /usr, ou seja, não será buscado em seus subdiretórios:

A opção -executable é usada para verificar se o usuário que executou o comando tem permissão de execução nos arquivos.

Se precisar ir mais fundo aumente o número, por exemplo, para buscar dentro de /usr e também em mais um nível abaixo, que coincide com: /usr/bin, /usr/sbin, /usr/lib:

5. Buscar arquivos na raiz ignorando diretórios

Precisa fazer uma busca em todo o sistema, mas quer ignorar diretórios como: /proc, /sys e /dev da pesquisa ? Então use as opções -path e -prune no mesmo comando.

A opção -path serve para especificar o diretório a ser evitado pela opção -prune. Por exemplo, para buscar no diretório “/(raiz) arquivos com a extensão “.sh“, mas evitar que a pesquisa seja feita em /proc, /sys e /dev, execute o seguinte comando:

O caractere\” (contra barra) antes dos caracteres )fecha parênteses e (abre parênteses
é para o shell ignorá-los, assim o comando find vai entender que é um grupo de critérios que serão usados na pesquisa.

Se o find achar um, dois ou os três path o -prune vai ignorá-los, ou seja, vai ignorar /dev/, /sys e proc da pesquisa, e vai buscar os arquivos “.sh” nos outros subdiretórios.

Caso queira ignora somente um diretório, por exemplo, o /run, o comando ficaria assim:

6. Como encontrar links quebrados ?

O comando find no linux pode ser usado também para encontrar links simbólicos(symlinks) quebrados, utilizando a opção -xtype com o valor l.

No exemplo a seguir é buscado no diretório /home e seus subdiretórios por links quebrados:

7. Apagar arquivos pesquisados pelo comando find

Precisa encontrar alguns arquivos e em seguida apagá-los ? O comando find tem a solução também, usando a ação -delete (opção).

Primeiro exemplo, você precisa encontrar em /home/dlncloud todos os arquivos executáveis para o usuário que está executando o comando e em seguida deletá-los, execute:

Outro exemplo, encontrar todos os links quebrados em /home e nos subdiretórios e em seguida removê-los:

8. Renomear arquivos pesquisados

Para renomear arquivos encontrados na pesquisa execute o comando find com a ação -printf em conjunto com o shell bash do linux.

Por exemplo, suponha que precisa renomear as fotos no formato png (extensão .png) que ficam armazenadas em /home/dlncloud e em seus subdiretórios, o comando é:

Explicação do comando:

O comando find vai buscar arquivos regulares com extensão “.png” no diretório /home/dlncloud e em seus subdiretórios.

Ao encontrar arquivos que atendem ao critério de busca, vai executar a ação (opção -printf), o -printf vai enviar o código “mv \”%h/%f\” \”%h/foto_%f\”\n” para o shell bash executar.

Esse código é o comando mv que vai renomear os arquivos, %h e %f são diretivas do -printf, %h substitui a localização de cada arquivo e %f substitui o nome de cada arquivo com quaisquer diretórios iniciais removidos.

O caractere “\” (barra invertida) é para o shell ignorar o caractere (aspas) e \n é para inserir uma linha após execução do comando. Assim, cada arquivo com extensão “.png” vai ser renomeado para “foto_” seguido do nome original do arquivo no diretório que está armazenado.

9. Personalizar saída da busca

Que tal personalizar a saída do comando find no linux ? Sim, isso também é possível com a ação -printf (opção).

O Exemplo a seguir é para buscar em /usr/bin arquivos executáveis para a conta que executou o comando find e exibir na saída o nome do arquivo, as permissões, quando foi modificado e o tamanho em bytes.

A saída do comando é similar à imagem abaixo:

Explicação:

Tudo que inicia com o caractere % (porcentagem) é uma diretiva do -printf.

%p – Nome do arquivo.

%m – Permissão do arquivo no formato octal.

%t – Data e hora de modificação do arquivo.

%s – Tamanho do arquivo em bytes

O código \n é para inserir uma linha, por isso que aparece ao fim de cada diretiva.

10. Encontrar arquivos com permissão 777 e alterar as permissões

No linux, o comando find pode ser usado para encontrar arquivos com base nas suas permissões utilizando a opção -perm. E usando a ação -exec (opção) é possível alterar as permissões dos arquivos encontrados.

Para encontrar arquivos com permissão 777 em /home e seus subdiretórios e alterá-las para 644 usando o comando chmod:

A ação -exec executa um comando para cada arquivo que corresponde com o critério de busca, nesse caso o comando executado é o chmod que altera as permissões de 777 para 644, o “{}” (abre e fecha chaves) é substituído por cada arquivo encontrado.

11. Como encontrar arquivos com base nos usuários e grupos proprietários ?

Precisar localizar arquivos que tem como proprietário um usuário específico ? Utilize a opção -user do comando find.

Para encontrar arquivos e diretórios em /etc e /var que tem como usuário proprietário, por exemplo, a conta de usuário www-data:

Se quer encontrar arquivos e diretórios em /etc e /usr que tem um grupo proprietário, por exemplo, o grupo bacula:

12. Encontrar arquivos no linux que foram modificados

Se a necessidade é encontrar arquivos que tiveram o conteúdo modificado em um determinado período de tempo, então use as opções -mtime e -mmin do comando find.

A diferença entre ambas é que a opção -mtime procura arquivos modificados há N x24 horas (dias) e -mmin procura arquivos modificados há N minutos. Para ambos N é um número(valor).

A seguir a explicação do significado dos sinais antes do valor:

– (menos que): Modificado dentro do período informado.

+ (mais que): Modificado após o período informado.

sem sinal: Exatamente no tempo em minutos (-mmin) ou dias (-mtime) informado.

Por exemplo, para encontrar arquivos no linux dentro de /usr/bin que foram modificados há menos de 10 dias:

Procurar arquivos dentro de /etc que foram modificados há menos de 120 minutos(2 horas):

Outro exemplo, encontrar arquivos em /srv/backup que iniciam com backup_incremental em seu nome e que foram alterados há mais de 6 dias:

A opção -mmin foi usada em vez de -mtime, por que -mmin tem mais precisão. O valor +8640 equivale há mais de 8640 minutos, ou seja, há mais de 6 dias.

E o exemplo final é remover arquivos que ficam em /srv/backup, que terminam com “.tar.gz” e que foram modificados há mais de 12 dias.

Assim, se um ou mais arquivos que terminam com “.tar.gz” forem encontrados em /srv/backup e esses arquivos foram modificados há mais de 12 dias, a ação -delete será executada removendo os arquivos.

13. Como procurar arquivos e diretórios vazios ?

Para fazer uma busca por arquivos ou diretórios vazios utilize em conjunto as opções -type e -empty.

Por exemplo, encontrar arquivos vazios no diretório /usr:

Caso precise encontrar diretórios vazios na mesma localização, mude o tipo na opção -type e repita o comando:

14. Como procurar arquivos pelo tamanho ?

A partição está quase cheia e não sabe qual arquivo está ocupando tanto espaço ? O comando find encontra usando a opção -size seguido do valor.

O valor é um número seguido da unidade, veja algumas unidades:

k (KiB) – Kibibytes.

M (MiB) – Mebibytes.

G (GiB) – Gibibytes.

Para a opção -size, os sinais antes do valor significa:

– (menor que): O tamanho é menor que o valor informado.

+ (maior que): O tamanho é maior que o valor informado.

sem sinal: O tamanho é exatamente o valor informado.

Por exemplo, para encontrar arquivos de logs em /var/log que estão ocupando mais que 100 Mebibytes, execute o comando:

O diretório home da sua conta de usuário está ocupando quase toda capacidade de armazenamento e você não sabe quais arquivos ocupam mais que 1 Gibibyte ? Abra o terminal e execute:

Para encontrar arquivos de vídeo “.mov” em /home que ocupam menos que 500 mebibytes:

15. Como encontrar arquivos com permissões especiais SUID e SGID ?

No linux, existem algumas permissões especiais como SUID e SGID, e o comando find pode procurar e encontrar arquivos e diretórios com essas permissões usando a opção -perm.

Para encontrar somente arquivos com a permissão SUID em /usr:

No início o “/u” significa usuário proprietário, em seguida = a permissãos” (SUID).

Se precisa encontrar somente diretórios com a permissão SGID em /var:

No início o “/g” significa grupo proprietário, em seguida = a permissãos” (SGID), Quando o “s” é atribuído ao grupo é a permissão SGID, quando atribuído ao usuário é a permissão SUID.

E para encontrar tanto as permissões SUID quanto SGID para arquivos ou diretórios no sistema, mas evitando buscar nos diretórios /proc, /sys, /run e /dev, execute o comando:

Conclusão

você aprendeu o que é o comando find, como ele funciona, sua sintaxe e explorou 15 exemplos práticos que mostram como ele pode ser útil no dia a dia.

Agora que você já conhece os principais recursos e exemplos práticos, o próximo passo é praticar. Teste os comandos em diferentes cenários, combine opções e explore ainda mais possibilidades.

Quanto mais você utilizar o comando find no linux, mais você entenderá o quão poderoso ele é. E se precisar de mais informações leia o manual do comando find.

Caso tenha alguma dúvida, sugestão ou elogio deixe seu comentário.

Perguntas frequentes (FAQ) sobre comando find no linux

Para que serve o comando find no linux ?

O find é utilizado para encontrar encontrar arquivos e diretórios dentro de um sistema de arquivos com base em diversos critérios, como nome, tipo, tamanho entre outros.

O Comando find no linux é recursivo ?

Sim, o comando find é recursivo por padrão. Mas pode-se limitar a profundidade da busca com a opção -maxdepth.

Qual a diferença entre a opção -name e -iname do comando find ?

A opção -name diferencia maiúsculas de minúsculas, já a opção -iname ignora essa diferença (maiúsculas e minúsculas)

É possível executar comandos nos arquivos encontrados ?

Sim! Use a opção -exec para executar uma ação sobre os arquivos ou diretórios encontrados pelo comando find.

Navegue por tópicos:

Foto de Edson Oliveira
Edson Oliveira

Especialista em Linux, trabalhando com TI tem experiência no gerenciamento, solução de problemas e suporte de servidores linux em ambientes corporativos.

Professor de cursos voltados a linux, tecnologias open source e certificações LPI. Possui as certificações LPIC-1, LPIC-2 e LPIC-3 (Mixed Environment).

Navegue por tópicos:

Você também pode gostar:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Valorizamos sua privacidade

Utilizamos cookies para aprimorar sua experiência de navegação, exibir anúncios ou conteúdo personalizado e analisar nosso tráfego. Ao clicar no botão “Aceitar todos”, você concorda com nosso uso de cookies.

Para mais informações leia nossa Política de Privacidade.