Мой фаворит входит в систему соседнего компьютера и играет в звуки крикета или лягушки.
При работе далеко в Майами Флориды, у меня была своя вся семья, назад в Орегоне, ища лягушку в гараже.
Попробуйте это:
find -name "*3.0.6.RELEASE.jar" -exec sh -c 'unzip -l "{}" | grep -q stereotype.Controller' \; -print
Нет никакой потребности в xargs
или a for
циклично выполнитесь здесь. Все могут быть сделаны с синглом find
. Если Вы хотите также произвести содержание, которое было захвачено, просто удалите -q
опция к grep
- но заметьте что grep
соответствия появятся перед каждым именем файла. Для более ясного вывода можно добавить -exec echo \;
в самом конце.
В Вашей 1-й остроте, в grep
команда добавляет -H
опция. Это должно включать имя файла в результат.
Вот из страницы справочника -
-H, --with-filename
Print the filename for each match.</strike>
ОБНОВЛЕНИЕ
Может быть этот сценарий, выручит -
#!/bin/bash
searchSTR="YOUR SEARCH"
for i in `find . -name "*jar"`
do
echo "Scanning $i ..."
jar tvf $i | grep $searchSTR > /dev/null
if [ $? == 0 ]
then
echo "==> Found \"$searchSTR\" in $i"
fi
done
Острота:
for i in `find . -name "*.jar"`; do jar tvf $i | grep "search pattern" && echo $i ; done
Единственная печальная часть является названием файла банки, будет отображен после grep
содержание
(standard input): 554 2011-08-18 16:49 org/springframework/stereotype/Controller.class
– stivlo
28.11.2011, 10:10
.m2
Знаток repo, и сохраняет сценарий (хорошо отформатированный и прокомментированный вместо одного лайнера) в /usr/local/bin/searchJar
. Я сделаю это в ближайшие дни, если кто-то не скажет мне, что существует простое решение.
– stivlo
28.11.2011, 11:15
grep
без jar tvf
. Первое эхо может быть удалено. Я просто добавил его так, чтобы можно было быстро просмотреть файлы банки, наш find
команда определяет.
– jaypal singh
28.11.2011, 11:19
SEARCH="Logger"; time while read jar _; do resultset=$(grep "${SEARCH}.*.class" < <(tar tf $jar)); if [ ${#resultset} -gt 0 ]; then printf "%s\n%s\n" "--> Found $SEARCH in $jar:" "$resultset"; fi; resultset=""; done < <(find . -type f -name "*.jar")
. Это - даже могущественный быстрый ;)
– Moreaki
06.02.2014, 22:36
Старый поток, но это выглядит как более чистый способ сделать это: http://alumnus.caltech.edu/~leif/opensource/cpcheck/CpCheckApp.html
Windows:
cpcheck [flags] classpath [classpath]*
Unix:
./cpcheck.sh [flags] classpath [classpath]*
Java:
java -jar cpcheck.jar [flags] classpath [classpath]*