3

Я управлял этим

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

в надежде найти все файлы .jar и выполнить для них jar tf (для просмотра содержимого). Но это не сработало !!!

1 ответ1

2

Вы используете xargs и jar tf неправильно.

Первоначальная цель xargs - передать как можно больше файлов одновременно - так вы получите несколько jar tf file1 file2 file3 file4 ... file200 ...

Но jar t , как и tar t , принимает сразу только один файл .jar. Все остальные аргументы действуют как фильтры для того, что перечислить / извлечь. Например, jar tf thing.jar org/example будет перечислять только файлы из подкаталога «org / example».

Поэтому, если вы запустите jar tf file1.jar file2.jar file3.jar , он только читает file1.jar и ожидает, что остальное совпадет с файлами в архиве.

Таким образом, вместо этого вам нужно указать xargs запускать команду один раз для каждого файла:

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

(Опция -d '\n' не имеет ничего общего с вашей проблемой, но, тем не менее, это хорошая идея - на тот случай, если вы обнаружите некоторые файлы с пробелами в их именах.)

Более прямой способ сделать то же самое:

find ... -exec jar tf {} \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .