Почему не `найти. имя *.jar | xargs jar tf` работа?
Я управлял этим
find . -name '*.jar' | xargs jar tf
надеясь, что найдет все .jar
файлы и выполнить jar tf
на них (для просмотра контента). Но это не сработало!!!
1 ответ
Вы используете 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
(The -d '\n'
Опция не имеет ничего общего с вашей проблемой, но, тем не менее, это хорошая идея - на случай, если вы обнаружите некоторые файлы с пробелами в их именах.)
Более прямой способ сделать то же самое:
find ... -exec jar tf {} \;