У меня есть дерево каталогов со многими файлами tar. Каждый файл tar содержит много других файлов. Я хочу выполнить поиск по всем файлам tar для данного шаблона и распечатать полный путь к любым файлам в tar, которые найдены.

Я получил это далеко:find . -type f -name '*.tar' -exec tar tf {} \; | egrep '<pattern>'

Теперь моя проблема в том, что приведенная выше команда печатает только имя файла в tar, который она находит. То есть, выход вышеизложенного равен:
pattern.jpg foundMe.txt

Я хотел бы, чтобы вывод содержал также полный путь и имя tar, где был найден файл. Как бы я это сделал?

Спасибо!

1 ответ1

0

Конечно, потерял сюжет где-то вдоль линии :$

У меня была похожая проблема с jar-файлами при поиске java-классов. Используется для того, чтобы сделать что-то вроде этого: захватить выходные данные каждого tar tf|grep <pattern> затем посмотреть, содержат ли выходные данные значение - если да, то имя печати ($f) и значение ($p):

find . -name '*.tar' -type f|while read f; do p="$(tar tf $f|egrep <pattern>)"; [ -n "$p" ] && echo -e "$f\n$p" ; p=""; done

Переключен порядок поиска аргументов - дешевле посмотреть имя файла перед типом файла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .