Com base na outra resposta e no comentário,
find . -type f -exec awk '/^!<symlink>/ {print FILENAME} {nextfile}' {} +
Como ele usa -exec … +
, ele executará awk
o menor número de vezes possível
(baseado no tamanho máximo da lista de argumentos).
Se awk
encontrar uma linha que corresponda à expressão regular
(isto é, a string de pesquisa), ele imprimirá o nome do arquivo.
(Você não precisa da barra invertida ( \
) se colocar a string entre aspas simples.)
Obviamente, se você também quiser ver o conteúdo da linha, você pode dizer
{print FILENAME; print}
ou
{print FILENAME ": " $0}
E então, incondicionalmente, avança para o próximo arquivo;
por isso, efetivamente, apenas a primeira linha de cada arquivo.
Nota: nextfile
não parece ser definido por POSIX ;
provavelmente é apenas no GNU awk
.