Проблема в том, что jar tvf
позволяет передавать только один файл.
Цикл for запускает файлы один за другим
jar tvf 1.jar; jar tvf 2.jar; ...
Однако xargs пытается разместить как можно больше аргументов в одной строке. Таким образом он пытается следующее:
jar tvf 1.jar 2.jar ...
Вы можете убедиться в этом, поместив эхо в вашу команду:
for f in `find . -name "*.jar"`; do echo jar tvf $f; done
find . -name "*.jar" | xargs echo jar tvf
Правильным решением является указание xargs использовать только один параметр для каждой команды:
find . -name "*.jar" | xargs -n 1 jar tvf
или
find . -name "*.jar" | xargs -i jar tvf {} # Find style parameter placement