Исходные данные
- 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
===
Сложность в том, что архивы могут иметь разные форматы и ключи содержат спецсимволы.
Прошу сильно не ругать) Буду благодарен за любую помощь)