3

Я пытаюсь найти, в какой банке содержится класс, я написал ниже, который, кажется, не работает какие-либо идеи?

 find -type f -name "*.jar" -exec jar -tvf "{}" \| grep  MyClass \; -ls

2 ответа2

1

Это не работает, потому что 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

Он не будет работать с каталогами с пробелами в них, но я просто не делаю этого в проекте.

0

Я не совсем уверен, что вы хотите ... Вот немного 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 .

Надеюсь, поможет.

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