[ad_1]
grep
é uma ótima ferramenta para pesquisar arquivos e entradas padrão no Linux e é capaz de correspondência de padrões de string e Regex. No entanto, às vezes é necessário controlar que tipo de arquivos grep
buscas e tem sinalizadores embutidos para fazer exatamente isso.
Incluir apenas alguns arquivos em pesquisas grep
Por padrão, grep
irá procurar todos os arquivos em uma determinada pasta e suas subpastas se você chamá-la com o recursivo -r
bandeira. Isso vai pegar tudo, mas se você quiser apenas algumas extensões, a opção que você vai querer usar é --include.
a --include
bandeira diz grep
uma inclui apenas arquivos que correspondem a um determinado padrão. Se especificado, grep
tratará todos os sinalizadores de inclusão como uma lista de permissões. Você pode usar isso com qualquer caractere global do Linux, como curingas para corresponder a tudo, incluindo uma determinada extensão:
grep -inr --include *.txt "foo" ~/folder
Observe que isso é escapado com uma barra porque es posible que los nombres de archivos tengan asteriscos. También puede especificar varios
--include
sinalizadores, por exemplo, pesquisando todos os arquivos de origem HTML, JS e CSS em um wwwroot:
grep -inr --include *.html --include *.css --include *.js "foo" ~/folder
Da mesma forma, você também pode excluir certos nomes de arquivos, que ainda corresponderão a tudo, exceto o glob, atuando como uma lista negra em cima da configuração existente:
grep -inr --exclude *.txt "foo" ~/folder
Há também um sinalizador para excluir diretórios inteiros de uma só vez:
grep -inr --exclude-dir config "foo" ~/folder
Use localizar em vez disso
Alternativamente, se você preferir usar o find
utilitário para pesquisar arquivos, você pode conectá-lo a grep
Usando tubos e xargs
. find
ele pode realizar pesquisas de padrões e Regex e tem vários benefícios, incluindo a capacidade de filtrar facilmente arquivos com base em metadados, como tamanho, data de criação e modificação e outros identificadores do Linux.
O comando é um pouco obtuso, pois você precisará usar -print0
no final de find
para imprimir uma lista de uma única linha e depois passá-la para xargs -0
S grep
desde ali.
find ./ -type f -iname "*.txt" -print0 | xargs -0 grep "foo"
[ad_2]