Исходные данные
- link.txt - список ссылок на архивы различных форматов(zip, rar, tar, tar.gz), пример сторки https://www.url1.com/archive1.zip
- file.conf - имя файла, в котором ищем строки, содержащие ключи
- pattern.txt - список ключей, по которым ищем нужные строки, содержат спец.символы, пример «level('_TURBO_SKY_', 'Jungo');»
Нужно скачать архивы по списку, найти в них файл по имени, в этом файле найти строки, содержащие ключи, сохранить результат в файл и удалить архив. На данный момент получилось сделать только скачивание по списку и поиск в архиве по простым ключам, но собирает кучу мусора по 2-м причинам:
- поиск осуществляется во всем архиве, а не в конкретном файле
- ключи не точные, т.к. пришлось обрезать спецсимволы
=== #!/bin/bash while read LINK; do LINK=${LINK%$'\r'} curl -o file.zip $LINK && zipgrep -H -f pattern.txt file.zip >> out.txt && rm file.zip done < link.txt ===
Думаю, нужно распаковать архив, передать результат команде find, для поиска файла по имени, затем найти строки в файле используя grep.
=== unzip -d dir1 file.zip && find dir1 -name «file.conf» |\ while read i; do \ cat «$i» | grep -H -f pattern.txt >> out.txt && rm file.zip && rm -R dir1 done ===
Сложность в том, что архивы могут иметь разные форматы и ключи содержат спецсимволы. Прошу сильно не ругать) Буду благодарен за любую помощь)