Получить имя файла после find -name | xargs

У меня есть несколько jar-директорий, в которых я хотел бы найти некоторые классы. Я нашел решение, чтобы узнать, существует ли класс со следующей командой:

find -name "*.jar" | xargs -n 1 jar tf | grep 'myClass' 

Проблема в том, что я не вижу, в какой jar она находится.

Я ищу решение для отображения имени файла в моем терминале. Мой текущий результат выглядит так:

 [user@server lib]$ find -name "*.jar" | xargs -n 1 jar tf | grep 'RollOn' com/ventyx/utils/logutils/rolling/RollOnDemandAppender.class 

Какие-либо предложения?

3 Solutions collect form web for “Получить имя файла после find -name | xargs”

С GNU grep :

 find . -type f -name '*.jar' -exec sh -c ' for file do jar tf "$file" | grep -H --label="$file" myClass done' sh {} + 

Или используйте awk, например:

 find . -type f -name '*.jar' -exec sh -c ' export FILE for FILE do jar tf "$FILE" | awk '\''/myClass/ { print ENVIRON["FILE"] ": " $0}'\'' done' sh {} + 

Вы также можете использовать bsdtar (поскольку файлы jar являются zip файлами и bsdtar поддерживает их), чтобы выполнить сопоставление самостоятельно (позволяя вам иметь более подробный вывод с метаданными файлов без риска соответствия grep для этих метаданных) d все равно нужно что-то вроде grep чтобы вставить имя файла:

 find . -type f -name '*.jar' -exec sh -c ' for file do bsdtar tvf "$file" "*myClass*" | grep -H --label="$file" "^" done' sh {} + 

Один из способов сделать это:

 find . -type f -name '*.jar' -exec \ sh -c 'jar tf "$1" | grep -q "$2" && printf -- '%s\n' "$1"' sh {} 'RollOn' \; 

С bash:

 shopt -s globstar for file in **/*jar; do jar tf "$file" | grep -q 'myClass' && printf '%s\n' "$file" done 

Или, чтобы напечатать как имя файла, так и соответствующую строку:

 shopt -s globstar for file in **/*jar; do jar tf "$file" | awk -vf="$file" '/myClass/{print f":"$0}' done 
  • xargs с перенаправлением stdin / stdout
  • Когда требуется xargs?
  • Интерактивное удаление файлов, перечисленных с помощью путей в текстовом файле
  • Как подключить вывод netcat? Проблемы с xargs и кавычками
  • Xargs с несколькими записями аргументов - используйте аргумент переменной окружения после sh -c '...'
  • Какова цель опции -I команды xargs?
  • Найти, сочетание xargs и grep вызывает ошибку
  • Как открыть несколько файлов из `find`?
  • Как мне регистрировать xargs -0 rm?
  • Использование xargs с вводом из файла
  • find + xargs: строка аргумента слишком длинная
  • Linux и Unix - лучшая ОС в мире.