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 é:
find [origem_da_pesquisa] [opções] [expressão]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 Arquivo | Descriçã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.
AVISO
A opção -name é case sensitive, ou seja, distingue letras MAIÚSCULAS de minúsculas. Por exemplo, a palavra youtube é diferente de YOUTUBE.
Por exemplo, para encontrar no diretório /etc somente arquivos regulares e nomeados como grub, execute:
find /etc -type f -name 'grub'
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:
find /etc -type f -name 'grub*' # inicia com a palavra grub
find /etc -type f -name '*grub' # termina com a palavra grub
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:
find /usr -type f -name '*.png' # busca arquivos com extensão .png2. 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:
find /etc -type d -name 'kernel'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:
find /etc -type d -name 'kernel' -ls3. 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:
find . -type f -iname 'dlncloud.txt'
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.
IMPORTANTE
Como -maxdepth é opção é global, ela deve ser inserida antes das demais.
Para buscar arquivos executáveis para o usuário atual somente dentro de /usr, ou seja, não será buscado em seus subdiretórios:
find /usr -maxdepth 1 -type f -executableA 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:
find /usr -maxdepth 2 -type f -executable5. 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:
find / \( -path /proc -o -path /sys -o -path /dev \) -prune -o -type f -iname "*.sh" -lsO 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:
find / -path /run -prune -o -type f -iname "*.sh" -ls6. 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:
find /home -xtype l7. 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:
find /home/dlncloud -type f -executable -deleteOutro exemplo, encontrar todos os links quebrados em /home e nos subdiretórios e em seguida removê-los:
find /home -xtype l -delete8. 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 é:
find /home/dlncloud -type f -iname '*.png' -printf "mv \"%h/%f\" \"%h/foto_%f\"\n" | bashExplicaçã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.
find /usr/bin -type f -executable -printf "Arquivo: %p\nPermissões: %m\nModificado em: %t\nTamanho total: %s bytes\n\n"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:
find /home -type f -perm 0777 -exec chmod 644 {} \;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:
find /etc /var -user www-dataSe quer encontrar arquivos e diretórios em /etc e /usr que tem um grupo proprietário, por exemplo, o grupo bacula:
find /etc /usr -group bacula12. 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:
find /usr/bin -type f -mtime -10Procurar arquivos dentro de /etc que foram modificados há menos de 120 minutos(2 horas):
find /etc -type f -mmin -120Outro exemplo, encontrar arquivos em /srv/backup que iniciam com backup_incremental em seu nome e que foram alterados há mais de 6 dias:
find /srv/backup -type f -iname "backup_incremental*" -mmin +8640A 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.
find /srv/backup -type f -iname "*.tar.gz"-mtime +12 -deleteAssim, 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:
find /usr -type f -emptyCaso precise encontrar diretórios vazios na mesma localização, mude o tipo na opção -type e repita o comando:
find /usr -type d -empty14. 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:
find /var/log -type f -size +100MO 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:
find $HOME -type f -size +1GPara encontrar arquivos de vídeo “.mov” em /home que ocupam menos que 500 mebibytes:
find /home -type f -iname "*.mov" -size -500M15. 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:
find /usr -type f -perm /u=sNo início o “/u” significa usuário proprietário, em seguida = a permissão “s” (SUID).
Se precisa encontrar somente diretórios com a permissão SGID em /var:
find /var -type d -perm /g=sNo início o “/g” significa grupo proprietário, em seguida = a permissão “s” (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:
find / \( -path /proc -o -path /sys -o -path /dev -o -path /run \) -prune -o \( -perm /g=s -o -perm /u=s \) -lsConclusã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.

