use o pipe dentro de uma instrução exec do find

3

Estou tentando descobrir qual jar contém uma classe, escrevi o abaixo, que parece não funcionar alguma idéia?

 find -type f -name "*.jar" -exec jar -tvf "{}" \| grep  MyClass \; -ls
    
por Charbel 05.12.2012 / 23:14

2 respostas

1

Isso não funciona, porque encontrar chamadas exec (3) diretamente e, como tal, não interpreta a linha de comando como um shell faz (para configurar o pipe).

Quando eu preciso fazer algo assim, eu geralmente coloco as coisas que quero em um script, para que eu possa fazer o script -exec {} \ ;. Outra opção é

find . -type f -name "*.jar" -exec sh -c "jar -tvf '{}' | grep  MyClass" \; -ls

FWIW, meu findClassInJar pessoal é

 for x in 'find . -name "*.jar" -o -name "*.zip"' ; do if unzip -l $x | grep -q $1 > /dev/null ; then echo $x ; fi ; done

Não funciona com diretórios com espaços, mas eu não faço isso em um projeto.

    
por 05.12.2012 / 23:30
0

Não sei bem o que você está querendo ... Aqui está um pouco de bash que exibe o nome do arquivo de um arquivo .jar contendo um arquivo .class.

for f in 'find *.jar'; do if jar -tvf $f | grep class &>/dev/null; then echo $f; fi; done

Você pode remover a instrução echo $f e colocar sua própria personalização nela, além de personalizar o comando grep nela.

Espero que ajude.

    
por 05.12.2012 / 23:28

Tags