Primeiro, tenha em atenção que, por engano, usou = em vez do == correto.
Você não precisa de xargs , pode executar diretamente de find . Além disso, o awk deve sair assim que processar a linha 2, em vez de ler todo o arquivo.
find /path -type f -exec awk 'FNR == 2 && /^regular expression$/ {print FILENAME}; FNR == 2 {nextfile}' '{}' +
O + no final do argumento -exec instrui find a colocar quantos argumentos de nome de arquivo forem possíveis. À-la xargs . Consulte a documentação find .
O ponto importante aqui é FNR==2 {nextfile} .
Se -exec é melhor que xargs (mas use -print0 & -0 , se disponível) está sujeito a discussões. Por um lado, find … | xargs … permite alguma paralelização com find lendo mais alguns nomes de arquivos, enquanto awk inspeciona um lote anterior. Por outro lado, a paralelização pode resultar em lixo ruim com awk e find competindo por diferentes faixas do disco. Seu hardware (tamanho do cache, SSD, etc.) mudará o acordo. O perfil decide então.