Formas de pagamento Abuse

Pesquisa de ficheiros por conteúdo em Linux: ack e ripgrep

03.05.2023, 23:33

A utilização da pesquisa de ficheiros por conteúdo no Linux pode reduzir significativamente o tempo e o esforço na procura de informações específicas em sistemas de ficheiros grandes e complexos.

Por que é necessário pesquisar ficheiros por conteúdo

Esta pesquisa pode ser particularmente útil quando se pretende encontrar ficheiros que contenham uma determinada cadeia de caracteres ou palavra-chave, ou quando se pretende encontrar todos os ficheiros que correspondam a um determinado padrão ou critério.

A pesquisa de ficheiros por conteúdo pode ser utilizada para várias tarefas, tais como encontrar

  • texto específico em grandes ficheiros de texto
  • ficheiros de configuração e scripts que contenham determinadas definições ou comandos
  • ficheiros que contenham dados específicos, tais como nomes de utilizadores ou números de telefone
  • ficheiros por tipo de conteúdo, como encontrar todos os ficheiros que contenham imagens JPEG ou documentos PDF.

O objetivo geral da pesquisa de ficheiros por conteúdo é facilitar o trabalho com o sistema de ficheiros e encontrar as informações necessárias no sistema de ficheiros.

ack

Vamos começar com o utilitário ack. Foi criado em 2005 como uma alternativa ao grep e rapidamente se tornou popular entre os programadores.

Ele tem várias vantagens sobre o grep, incluindo:

  • pesquisas mais inteligentes de arquivos e exceções. Por defeito, o ack só procura em ficheiros que possam fazer sentido, por exemplo, excluindo pastas .svn ou .git. E você pode adicionar suas próprias regras e exceções;
  • O Ack pesquisa arquivos e diretórios ocultos por padrão;
  • O Ack não tenta procurar em todo o lado, mesmo nas pastas do sistema, como o grep. Isto significa que pode facilmente encontrar ficheiros escondidos no seu sistema.

Exemplos de como usar o ack:

  • Encontrar todos os ficheiros na pasta atual e nas suas subpastas que contenham a palavra "teste": ack "teste"
  • A mesma coisa, mas excluindo ficheiros com extensão .bak: ack "teste" --ignore-file=match:/.bak$/
  • Encontrar todos os ficheiros na pasta atual que contenham a string "hello" e produzir as primeiras 2 linhas de cada ficheiro: ack "hello" --heading --max-count=2

ripgrep

A segunda ferramenta interessante é o ripgrep. É semelhante ao ack em muitos aspectos, mas usa um algoritmo de pesquisa mais rápido, o que o torna especialmente útil para grandes projectos.

Aqui estão alguns exemplos:

  1. Encontrar todos os ficheiros na pasta atual e nas suas subpastas que contenham a palavra "teste": rg "teste"
  2. O mesmo, mas excluindo ficheiros com extensão .bak: rg "teste" --glob "!*.bak"
  3. Encontrar todos os ficheiros na pasta atual que contenham a string "hello" e mostrar as primeiras 2 linhas de cada ficheiro: rg "hello" --heading --max-columns=2

No final, vale a pena mencionar o fzf. Não é apenas um localizador de strings como o ack e o ripgrep. O fzf é usado como um utilitário para encontrar ficheiros, pastas e itens numa lista. Caso contrário, funciona de forma semelhante ao ack/ripgrep, mas com a capacidade adicional de filtrar os resultados em tempo real. Aqui estão alguns exemplos:

  • Procurar por ficheiros que comecem com a letra F no seu computador: locate F | fzf -m
  • Sair da pasta atual e ir para a diretoria que pretendo: cd **<TAB> | fzf
  • Selecionar a revisão SVN e copiar o número para a área de transferência: svn log | fzf --reverse --ansi | awk '{print $1}' | pbcopy

Esperamos que estas ferramentas o ajudem a encontrar os ficheiros e strings de que necessita de forma rápida e eficiente. Qualquer que seja a sua escolha, todas elas oferecem pesquisas avançadas que podem acelerar consideravelmente o seu trabalho.