Linux Tux in orange background

10 exemplos de uso do comando find no Linux

O find é um utilitário incrivelmente flexível e muito usado na linha de comando do Linux/UNIX ou dentro de scripts.
Com ele é possível encontrar arquivos por tipo, por condição, por conteúdo etc. dentro do seu sistema e através de buscas recursivas.

O comando find já foi abordado em outros artigos, neste site.
Se você tiver interesse em complementar seu conhecimento sobre o tema, clique nos links no decorrer do texto ou use o sistema de busca do site.

Nestes exemplos, vou mostrar que você pode usar diversos critérios de busca com o comando find: permissões, pertencimento (ownership), por data/hora de alteração, por tamanho etc.

Por ser um comando padrão, no UNIX e no GNU/Linux, não há necessidade de instalar nada. Apenas abra um terminal (Ctrl + Alt + T, no Ubuntu) e comece a aplicar os exemplos.

O comando find é uma ferramenta essencial para o aprendizado de quem deseja se tornar produtivo na linha de comando do Linux ou do MacOS.

Exemplos de uso do find

O uso básico do find não precisa incluir qualquer opção ou parâmetro.
Ao executar o find no diretório (pasta) atual, ele irá perscrutar todos os subdiretórios, recursivamente, e exibir a lista completa de arquivos, inclusive aqueles que estão ocultos.


find

A depender do diretório atual, a execução pode ser um pouco demorada. Mas pode ser interrompida a qualquer momento com as teclas Ctrl + C.
Geralmente, é possível combinar o find ao comando grep, para refinar os resultados da busca:


find | grep -i "comando find"

./Documentos/Livros/Imagens/elias.praciano.com - featured/comando find.jpg
./.fotoxx/thumbnails/hem/justincase/Documentos/Livros/Imagens/elias.praciano.com - featured/comando find.jpg.jpeg

O comando acima é equivalente ao ls, conforme o exemplo abaixo:


ls -lahR | grep -i "comando find"

… o find costuma ser bem mais rápido, contudo. Faça as suas experiências.

O comando pode ser executado especificamente em um diretório:


find Imagens/2018/

Também é possível filtrar por nome ou extensão do arquivo que você deseja encontrar:


find Imagens/2018/*.ods

Imagens/2018/foapiso.ods
Imagens/2018/imagens2018_18-55mm.ods
Imagens/2018/imagens2018_75-300mm.ods
Imagens/2018/imagens2018_sigma30mm.ods
Imagens/2018/stat-imagens2018.ods

Com o parâmetro ‘-name’, é possível obter resultados mais precisos em sua busca.


find Imagens/2018/ -name "panoramas"

Imagens/2018/06/16/panoramas

O resultado da busca é sensível à caixa (maiúsculas/minúsculas) das letras.
Para desligar a sensibilidade (case sensitiveness), use ‘-iname’:


find Imagens/2018/ -iname "panoramas"

Use também os coringas entre as aspas:


find Imagens/2018/ -iname "*noram*"

Imagens/2018/05/01 ana maria/panorama_2242_2247.tif
Imagens/2018/05/01/darktable_exported/panorama_2242_2247.jpg
Imagens/2018/06/16/panoramas

Ao optar por fazer a busca no diretório raíz / todo o sistema será vasculhado, incluindo a rede e os dispositivos externos conectados (se estiverem montados).

A recursividade é padrão para o comando find. Se você quiser restringir a profundidade da busca, precisa definir isso claramente.
Com a opção ‘-maxdepth’ é possível determinar até quantos subdiretórios devem ser analisados.


find Imagens/ -maxdepth 3 -iname "*.cr2"

Imagens/Capture/capture000000.cr2
Imagens/Capture/capture000001.cr2
Imagens/Capture/capture000002.cr2
Imagens/Capture/capture000003.cr2
Imagens/Capture/capture000004.cr2
Imagens/Capture/capture000005.cr2
Imagens/Darktable/20180525_noname/20180525_0001.CR2
Imagens/Darktable/20180525_noname/20180525_0002.CR2
Imagens/Darktable/20180525_noname/20180525_0003.CR2

Para fazer a busca apenas no diretório atual, sem recursividade, use ‘-maxdepth 1’.

Também é possível inverter o filtro da busca.
Por exemplo, eu sei que dentro de Imagens/ há vários subdiretórios com arquivos .jpg e .cr2 (arquivos RAW da Canon). Mas também há outros tipos de arquivos.
Veja como excluir dos resultados da busca os arquivos .cr2:


find Imagens/ -not -iname "*.cr2"

Para facilitar, use ‘!’ no lugar de ‘-not’:


find Imagens/ ! -iname "*.png"

Use o operador ‘-o’ (OR) para restringir a busca a 2 ocorrências:


find Imagens/ -iname "*.txt" -o -iname "*.ods"Imagens/2018/aberturas.txt

Imagens/2018/distfocal.txt
Imagens/2018/distfocal_75-300.txt
Imagens/2018/maio2018.txt
Imagens/2018/stat-imagens2018.ods
Imagens/2018/imagens2018_18-55mm.txt
Imagens/2018/imagens2018_18-55mm.ods
Imagens/2018/imagens2018_75-300mm.txt
Imagens/2018/imagens2018_sigma30mm.txt
Imagens/2018/imagens2018_75-300mm.ods
Imagens/2018/imagens2018_sigma30mm.ods
Imagens/2018/imagens2018_sigma30mm-b.txt
Imagens/2018/imagens2018_Yongnuo35-50mm.txt
Imagens/2018/foapiso.txt
Imagens/2018/foapiso.ods

O operador AND pode ser invocado com a opção ‘-a’, embora seja um comportamento padrão:


find Imagens/2018 -iname "*.cr2" -a -iname "*.jpg" 

Combine com o operador ‘!’, para excluir exatamente aqueles 2 tipos de arquivos:


find Imagens/2018 ! -iname "*.cr2" -a ! -iname "*.jpg" 

Notou que os nomes de diretórios também são mostrados?
Pois é… Para o UNIX/Linux “tudo é arquivo”.

Se quiser filtrar mais ainda os resultados, para mostrar apenas arquivos “de verdade”, use a opção ‘-type f’:


find Imagens/2018 -type f ! -iname "*.cr2" -a ! -iname "*.jpg"

Use o comando wc, para contar quantos arquivos (no meu exemplo) não são .cr2 ou .jpg, na busca:


find Imagens/2018 -type f ! -iname "*.cr2" -a ! -iname "*.jpg" | wc -l

445

No exemplo simplificado, abaixo, veja como encontrar todos os estilos do DarkTable armazenados em uma pasta:


find Imagens/2018 -type f -iname "*.dtstyle" | wc -l

255

A sua pesquisa pode incluir mais de um diretório:


find Imagens/2018/06/ Imagens/2018/04/ -type f -iname "*.xmp"

Imagens/2018/06/02/img_4337.cr2.xmp
Imagens/2018/06/12/img_4667.cr2.xmp
Imagens/2018/06/15/img_4891.cr2.xmp
Imagens/2018/06/16/img_4996.cr2.xmp
Imagens/2018/06/16/panorama/img_5064.cr2.xmp
Imagens/2018/04/25/img_1536.cr2.xmp
Imagens/2018/04/28/break/img_1962.cr2.xmp

Espero que, com estes exemplos, tenha ajudado você a entender e usar melhor o comando find no seu sistema. 😉
Divirta-se!

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia. Fã de séries, como "Rick and Morty" e "BoJack Horseman". Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

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