Comando find: expressões regulares e exclusão de diretórios

Publicado por Fábio Berbert de Paula em 27/07/2009

[ Hits: 23.649 ]

Blog: https://fabio.automatizando.dev

 


Comando find: expressões regulares e exclusão de diretórios



Hoje precisei usar o find com algumas opções personalizadas e acabei tendo de recorrer às páginas de manual do mesmo. Sendo assim resolvi compilar a informação extraída numa pequena dica sobre uso do find.

Suponha que você queira encontrar todas as imagens de extensão .jpg, jpeg, .gif e .png dentro de seu diretório pessoal. O comando ficará assim:

cd (só para certificar que você o executará em seu diretório home)

find . -regextype posix-egrep -iregex '.*\.(jpg|jpeg|gif|png)'

Onde:
  • find . : procurar no diretório corrente, o home;
  • -regextype posix-egrep : definir o tipo de expressão regular do comando find, quando não definido entende o padrão emacs. Como gosto do padrão egrep, defini tal opção (na verdade nem sei como converter a regexp acima para o padrão emacs :P);
  • -iregex '.*\.(jpg|jpeg|gif|png)' : definir a expressão regular que casa com as extensões de arquivos desejadas. Note que usei "-iregex" ao invés de "regex", dessa forma a busca não faz distinção entre maiúsculas e minúsculas (ex.: .JPG e .jpg).

Bom, agora podemos incrementar ainda mais nossa busca, pois a mesma retornou centenas de imagens que estão dentro do diretório "fotos" e na verdade quero encontrar as imagens que não estão dentro de "fotos". Então nosso comando fica assim:

find . -path ./fotos -prune -o -regextype posix-egrep -iregex '.*\.(jpg|jpeg|gif|png)'

Onde:
  • -path ./fotos -prune -o : informa ao find para ignorar o caminho "./fotos".

Jóia! Porém este comando ainda retorna centenas de imagens de cache contidas nos diretórios ocultos de programas que uso. Então para finalizar, vamos excluir os diretórios ocultos usando uma expressão regular como parâmetro do -path:

find . -path ./fotos -prune -o -path './.*' -prune -o -regextype posix-egrep -iregex '.*\.(jpg|jpeg|gif|png)'

Pegaram? Espero que sim! Qualquer dúvida é só executar:

man find

Um abraço.

Outras dicas deste autor

Instalando o PulseEffects no Debian 10 Buster

Siga as publicações do Viva o Linux no Android

OBS - Captura de Tela Tremulante (OBS Flickering) [Resolvido]

Configurando o Exim como MX secundário

Coderbyte - teste seus conhecimentos em programação!

Leitura recomendada

Instalar pacotes RPM no Ubuntu

Bordas das janelas sumindo quando se habilita o compiz-fusion no Linux?

Como cortar arquivos de áudio usando o ffmpeg

Como ver a versão da distribuição no terminal (e outras informações)

free - Comando pra saber utilização de memória do Linux

  

Comentários
[1] Comentário enviado por czusx em 21/07/2011 - 16:46h

Muito bom artigo! Obrigado. :)



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts