porque não 'encontra. -name '* .jar' | xargs jar tf 'trabalho?

3

eu corri isto

find . -name '*.jar' | xargs jar tf

esperando, encontre todos os arquivos .jar e execute jar tf neles (para visualizar o conteúdo). Mas não parece funcionar !!!

    
por One Two Three 28.01.2016 / 00:26

1 resposta

2

Você está usando xargs e jar tf do jeito errado.

O propósito original de xargs é passar tantos arquivos quanto possível de uma só vez - assim você acaba com algumas invocações jar tf file1 file2 file3 file4 ... file200 ... .

Mas jar t , bem como tar t , aceita somente o um arquivo .jar de uma só vez. Todos os argumentos restantes atuam como filtros para o que listar / extrair. Por exemplo, jar tf thing.jar org/example listaria apenas os arquivos do subdiretório "org / example".

Portanto, se você executar jar tf file1.jar file2.jar file3.jar , ele somente lê arquivo1.jar , e espera que o resto corresponda aos arquivos dentro do arquivo.

Então, você precisa dizer xargs para executar o comando uma vez por arquivo :

find ... | xargs -d '\n' -n 1 jar tf

(A opção -d '\n' não tem nada a ver com o seu problema, mas, no entanto, é uma boa idéia - caso você encontre alguns arquivos com espaços em seus nomes.)

Uma maneira mais direta de fazer o mesmo é:

find ... -exec jar tf {} \;
    
por 28.01.2016 / 09:20

Tags