Você passou a opção -l
, informando grep
para listar apenas os nomes dos arquivos. Esses são os nomes dos arquivos .jar
, não há outros arquivos envolvidos.
Se você quiser que grep
envie os nomes das classes, será necessário remover -l
. Mas isso imprimirá muitas outras porcarias na mesma “linha”, porque os frascos são arquivos binários, não organizados por linhas. (Com o GNU grep, você precisa passar -a
para obter essa saída e não apenas “Arquivo binário… corresponde”.)
Com o GNU grep, uma possibilidade é combinar o nome completo da classe e passar -o
para produzir apenas isso:
grep -rao --include='*.jar' '[0-9A-Z_a-z]*SignonEJB[0-9A-Z_a-z]*' .
ou se você quiser os pacotes também
grep -rao --include='*.jar' '[$./0-9A-Z_a-z]*SignonEJB[0-9A-Z_a-z]*' .
Outra abordagem é executar strings
nos arquivos primeiro para extrair sequências imprimíveis. (Os dois comandos são equivalentes; a versão sed engole em \&
e newline, a versão awk suporta todos os caracteres.)
find . -name '*.jar' -exec sh -c 'strings "$0" | grep SignonEJB | sed "s&^&$0&"' {} \;
find . -name '*.jar' -exec sh -c 'strings "$0" | jar=$0 awk "/SignonEJB/ {print ENVIRON[\"jar\"] \":\" $0}"' {} \;
Como alternativa (e estritamente falando, mais confiável, mesmo que seja improvável que usar grep
apresente falsos positivos), use unzip
para listar os nomes dos arquivos e filtrar isso.
find . -name '*.jar' -exec sh -c 'unzip -l -- "$0" | grep SignonEJB' {} \;