Получить имя файла после 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
  • Как правильно использовать параллель в этой ситуации?
  • Почему xargs вырезает цитаты из ввода?
  • Как получить общее количество строк с помощью `wc -l`?
  • Импортировать SQL-файлы с помощью xargs
  • Скопируйте файлы с родительской папкой в ​​новый каталог
  • Понимание -regex с GNU find
  • Отменить все переменные ENV, соответствующие _PROXY
  • Как использовать scp с xargs?
  • xargs с перенаправлением stdin / stdout
  • xargs на OSX: незаконный вариант -
  • Interesting Posts

    Тар, используя индикатор выполнения и обработку многотонов

    Не реагировать на ARP w / request для IP 0.0.0.0

    Стиль Skype gtk не работает на debian squeeze 64

    Как я могу перестать видеть скрытые файлы в Midnight Commander?

    Команда для удаления части данных JSON из каждой строки?

    Форматировать вывод на определенную длину строки

    Как удалить USB-накопитель без беспокойства, если он был отключен?

    Как управлять конфигурациями на нескольких компьютерах и оболочках?

    Есть ли способ reptyr процесса make или любого процесса с подпроцессами?

    debootstrap завершается частично через "stdin: не в сжатом формате"

    Как я могу сделать мою команду более восприимчивой к системным замедлениям, чтобы использовать ее как визуальный виджет QoS на моем рабочем столе?

    виртуальный сетевой интерфейс для клиента ShrewSoft VPN

    Отсутствует журнал журнала systemd

    Создание нескольких временных псевдонимов

    Может ли команда date принимать в качестве аргумента строку даты в файле, заданном другой командой date?

    Linux и Unix - лучшая ОС в мире.