Я пытаюсь найти, в какой банке содержится класс, я написал ниже, который, кажется, не работает какие-либо идеи?
find -type f -name "*.jar" -exec jar -tvf "{}" \| grep MyClass \; -ls
Это не работает, потому что find вызывает exec(3) напрямую и поэтому не интерпретирует командную строку, как оболочка (для настройки канала).
Когда мне нужно сделать что-то подобное, я обычно добавляю в сценарий то, что я хочу, чтобы я мог выполнить -exec script {} \;. Другой вариант
find . -type f -name "*.jar" -exec sh -c "jar -tvf '{}' | grep MyClass" \; -ls
FWIW, мой личный findClassInJar
for x in `find . -name "*.jar" -o -name "*.zip"` ; do if unzip -l $x | grep -q $1 > /dev/null ; then echo $x ; fi ; done
Он не будет работать с каталогами с пробелами в них, но я просто не делаю этого в проекте.
Я не совсем уверен, что вы хотите ... Вот немного bash, которое отображает имя файла .jar, содержащего файл .class.
for f in `find *.jar`; do if jar -tvf $f | grep class &>/dev/null; then echo $f; fi; done
Вы можете удалить оператор echo $f
и поместить туда свою собственную настройку, а также настроить в ней команду grep
.
Надеюсь, поможет.