O problema é que você está passando um arquivo de cada vez para grep
. Quando grep
vê um único arquivo em sua linha de comando, presume que você saiba exatamente onde está pesquisando, por isso não exibe o nome do arquivo antes das correspondências.
Um truque para forçar grep
a sempre dar saída a um nome de arquivo é também passar /dev/null
(onde não haverá correspondência alguma vez). Algumas implementações do grep têm uma opção para isso: -H
.
Além disso, você pode usar -exec … {} +
em vez de -exec … {} \;
para executar o programa para muitos arquivos de uma só vez. Isso é mais rápido. Você ainda deve passar /dev/null
ou -H
, porque pode acontecer que o comando seja invocado exatamente em um arquivo, seja porque há um único arquivo correspondente ou porque há muitas correspondências exigindo que grep
seja invocado várias vezes e uma vez acontece a um único arquivo.
find -name 'LYFNRE.*' -exec grep -f file1.txt /dev/null {} +
O GNU grep e implementações recentes do BSD (incluindo OSX) suportam opções para chamar grep
recursivamente sem requerer find
.
grep -R --include='LYFNRE.*' -f file1.txt -H .
Alternativamente, você pode fazer globalização recursiva em seu shell. Em zsh, isso funciona fora da caixa. No bash, você precisa executar shopt -s globstar
primeiro, e cuidado com o bash que recorre através de links simbólicos para diretórios (diferente de find
ou zsh).
grep -f file1.txt /dev/null **/LYFNRE.*