Aqui está uma solução com find
que também exibirá os nomes dos arquivos contendo uma correspondência:
find . -name "*.xml" -exec grep '<dbname>' {} \; \
-exec echo -e {}"\n" \; \
| sed 's/<dbname>\(.*\)<\/dbname>//g'
Explicação
-
find . -name "*.xml"
localiza todos os arquivos xml recursivamente a partir do diretório atual -
-exec grep '<dbname>' {} \;
em cada pesquisa de arquivo para o padrão<dbname>
-
-exec echo -e {}"\n" \;
echo filename + nova linha (-e
opção faz o echo interpretar\n
) -
| sed 's/<dbname>\(.*\)<\/dbname>//g'
saída de canal parased
para imprimir apenas o campo contido entre as tags<dbname></dbname>
.
NOTA 1: você pode formatar a saída em echo -e ...
para ter resultados para cada arquivo claramente definidos, por exemplo, adicionando novas linhas ou linhas de sublinhado, o que for mais adequado à sua necessidade.
NOTA2: o caminho para cada arquivo será dado em relação a .
(por exemplo, ./subfolder1/file.xml
). Se você quiser um caminho absoluto, vá para find $PWD -name ...
.