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

Varnish предназначен для обслуживания файлов веб-страниц, например, html, js, css, изображения и т. д. Он перехватывает HTTP-трафик между интернет-клиентами и сервером внутренних приложений. Varnish слушает http-порт 80 и говорит по протоколу HTTP. Ни браузеры, ни серверные приложения не должны знать, что Varnish существует, если он правильно настроен, он просто работает.

Memcached - это приложение, обычно используемое для кэширования данных, передаваемых с сервера базы данных в приложение, с целью уменьшения количества запросов к БД. Кроме того, поскольку данные кэшируются в памяти, их извлечение происходит намного быстрее. Но это приложение, которое управляет вставкой и извлечением данных из Memcached, другими словами, приложение должно быть написано так, чтобы правильно использовать Memcached. Memcached не поддерживает протокол HTTP.

3
01.06.2017, 11:32
3 ответа

С 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 с этими метаданными), хотя вам все равно нужно что-то вроде grep, чтобы вставить имя файла :

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

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

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

С ударом:

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
3
27.01.2020, 21:08

Теги

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