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!