Você pode fazer:
find . -type f -exec grep -icH decor {} \; | grep -v :0\$
Isto irá obter o nome do arquivo e a contagem de cada partida e removerá arquivos com uma contagem de 0 usando o egrep canalizado
Tarefa:
1) encontrar uma string 'decor' dentro de arquivos em um diretório
2) obter o número de ocorrência para a decoração de cada arquivo que tenha
A primeira parte do problema é parcialmente resolvida com find . -type f | grep -i decor *
Mas isso não parece grep
para todos os arquivos que são encontrados a partir de find
, mas sim o que está no topo do diretório atual.
Eu tenho que usar algo diferente de *
para grep
para grep para arquivos encontrados no find?
o que precisa ser canalizado para que seja exibido com um nome de arquivo e o número de ocorrências para a decoração de cada arquivo?
"Arquivos em um diretório" geralmente não significa "subdiretórios iside e recursivamente". Eu usaria apenas
grep -c decor *
Se você precisar procurar subdiretórios, também, você pode usar find, mas conecte os comandos de forma diferente: pipe apenas conecta a saída do primeiro comando à entrada do segundo. O Grep não espera uma lista de arquivos em sua entrada, no entanto.
find . -type f -exec grep -cH decor {} + | grep -v :0
Você pode usar a opção -exec.
find . -type f -exec grep decor {} \;
ou use xargs
find . -type f | xargs -i grep decor {}
TMTOWTDI - Eu gosto de ver as outras variantes, então aqui está a minha também:
$ find . -type f -exec egrep -li decor {} \;
$ perl -e '$c=0; while(<>){$c++ if /decor/;} continue {if(eof){print("$ARGV:$c\n"); close ARGV; $c=0;} }' *
Só porque eu senti vontade de reescrever um Perl 1-liner que faz o mesmo que um antigo awk
exemplo tirado das páginas de Kernighan e Pike .