Это распечатывает список файлов внутри архива, соответствующих заданному шаблону:
tar --ignore-command-error -xvf PROD_009_010919_0110.tar.gz --to-command="grep -FH 1234536 -" | grep -B1 --no-group-separator '(standard input)' | grep -v '(standard input)'
Опция --to-command
извлекает каждый файл и отправляет на стандартный ввод команды grep
. Опция -v
перечисляет каждый файл по мере их обработки.
--ignore-command-error
используется для игнорирования статуса выхода, когда grep
не может найти соответствие. Из-за опции -H
(печатать имя файла ), используемой с командой grep
, каждая совпадающая строка имеет префикс '(стандартный ввод )'.
Это приводит к следующему выводу команды tar
:
file1
file2
(standard input): <matched lines from file2>
file3
(standard input): <matched lines from file3>
Передача этого вывода по конвейеру позволяет двум командам grep
извлекать только имена файлов, за которыми непосредственно следует строка ' (стандартный ввод )' на следующей строке. Эту обработку, вероятно, можно было бы улучшить, используя регулярное выражение для соответствия шаблону вместо двух последовательных команд grep
, которые я использовал здесь.
Результирующий вывод в этом случае будет:
file2
file3