Проверка соответствия имени файла шаблону в команде tar --to-command - PullRequest
0 голосов
/ 28 мая 2019

У меня есть файл TGZ (сжатый с помощью GZIP), который содержит множество других сжатых файлов, некоторые двоичные файлы, некоторые текстовые файлы ascii. Я хотел бы выполнить поиск сжатых текстовых файлов ascii в поисках совпадений строк и напечатать имя файла. Некоторые исследования привели меня к tar --to-command, который, кажется, почти выполняет то, что я хочу, когда выполняется с zgrep, однако я не могу отфильтровать, какие имена файлов искать, так что задача занимает непомерно много времени и выводит некоторый мусор вместе путь.

Это делает то, что я хочу, за исключением того, что проверяет все файлы в архиве:

tar xaPf log.tgz --to-command='zgrep -l "mystring" && echo $TAR_FILENAME || true'

Это было мое лучшее предположение о том, как это сделать:

tar xaPf log.tgz --to-command='if [[ $TAR_FILENAME *asciiFile.gz ]]; then zgrep 'mystring'; fi'

Но все, что я получаю, это:

/bin/sh: 1: [[: not found

Для каждого файла. Из того, что я прочитал, аргументы для --to-command не запускаются в полной оболочке bash, так что я могу сделать с помощью условного оператора, чтобы я только оценивал файлы с данным суффиксом? Спасибо


Обновление: Понимая, что --to-command выполняет только команды оболочки /bin/sh, я пересмотрел свою команду:

tar xaPf log.tgz --to-command='[ "$TAR_FILENAME" = "*asciiFile.gz" ] && zgrep "mystring" || true'

Так что теперь он выполняется без ошибок, но условное выражение никогда не выполняется. Как я могу проверить шаблон в /bin/sh?

1 Ответ

0 голосов
/ 28 мая 2019

Вот оно:

tar xaPf log.tgz --to-command='echo "$TAR_FILENAME" | grep -q "asciiFile.gz" && zgrep "mystring" || true'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...