Наш ежедневный файл подачи в среднем составляет 2 ГБ. Эти файлы архивируются в один ZIP файл в конце каждого месяца и сохраняются в сетевом ресурсе. Время от времени мне нужно искать определенные записи в этих файлах. Я делаю это, подключая удаленный рабочий стол к общему серверу, распаковывая файлы в временную папку, запуская поиск grep (или PowerShell), а затем удаляю временную папку. Теперь, поскольку наш сервер работает на дисковой памяти, его больше не рекомендуется распаковывать в папку temp. Что такое эффективный способ поиска регулярных выражений на этих zip файлах с минимальным воздействием на диск или сетевые ресурсы?
Как я могу использовать grep для текстового шаблона в текстовом файле с застежкой-молнией?
Ответ 1
zgrep в Linux. Если вы находитесь в Windows, вы можете загрузить GnuWin, который содержит порт Windows zgrep.
Ответ 2
Расширения сообщества PowerShell (PSCX) включают командлеты Read-Archive
и Expand-Archive
, но не (пока?) включают который сделает то, что вы хотите очень просто. Тем не менее, вы можете использовать
Read-Archive
и Expand-Archive
. Что-то вроде этого непроверенного бит
Read-Archive -Path foo.zip -Format Zip | `
Where-Object { $_.Name -like "*.txt" } | `
Expand-Archive -PassThru | select-string "myRegex"
позволит вам искать без извлечения всего архива.
Ответ 3
В расширениях сообщества Powershell есть несколько команд, связанных с zip (PSCX). Я не думаю, что они будут делать то, что вы хотите, однако (я мог бы ошибаться в этом). Вместо этого я бы использовал .Net Zip Library (DotNetZip), который позволяет существенно перечислить имена файлов в архиве затем извлеките только те, которые вы хотите.