У меня есть файл 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
?