Ища класс Java в ряде БАНОК с находкой, разархивируйте, grep

Мой фаворит входит в систему соседнего компьютера и играет в звуки крикета или лягушки.

При работе далеко в Майами Флориды, у меня была своя вся семья, назад в Орегоне, ища лягушку в гараже.

6
16.12.2011, 05:03
3 ответа

Попробуйте это:

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 \; в самом конце.

8
27.01.2020, 20:24
  • 1
    +1, я всегда хотел видеть, как буферизированные объекты от находки могут быть переданы двум объектам. Хороший материал!! нечто –  jaypal singh 28.11.2011, 18:14

В Вашей 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 содержание

2
27.01.2020, 20:24
  • 1
    Спасибо, но не помогает, так как это уже обрабатывается с, разархивировали, является слишком поздним для получения имени файла. Вот вывод: (standard input): 554 2011-08-18 16:49 org/springframework/stereotype/Controller.class –  stivlo 28.11.2011, 10:10
  • 2
    я видел обновление, это концептуально подобно моему Perl, я думаю, что, вероятно, изменю его, чтобы принять параметр для строки поиска, изучить мой .m2 Знаток repo, и сохраняет сценарий (хорошо отформатированный и прокомментированный вместо одного лайнера) в /usr/local/bin/searchJar. Я сделаю это в ближайшие дни, если кто-то не скажет мне, что существует простое решение. –  stivlo 28.11.2011, 11:15
  • 3
    Это звучит правильным, можно превратить это в остроту, но потому что мы должны посмотреть в файле банки, я действительно не знаю способ сделать grep без jar tvf. Первое эхо может быть удалено. Я просто добавил его так, чтобы можно было быстро просмотреть файлы банки, наш find команда определяет. –  jaypal singh 28.11.2011, 11:19
  • 4
    MSWindows, Добавила острота. Надежда, которая помогает! –  jaypal singh 28.11.2011, 11:29
  • 5
    @jaypalsingh при реальном нахождении порядка печати печальным, возможно, небольшое изменение кода, мог быть достаточным для рендеринга Вас счастливый снова: 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]*
1
27.01.2020, 20:24

Теги

Похожие вопросы