Как я могу найти текстовый шаблон в заархивированном текстовом файле? - PullRequest
19 голосов
/ 09 августа 2009

Наш дневной файл в среднем имеет размер 2 ГБ. Эти файлы архивируются в один zip-файл в конце каждого месяца и хранятся в общей сетевой папке. Время от времени мне нужно искать определенные записи в этих файлах. Я делаю это, подключаясь с помощью удаленного рабочего стола к общему серверу, распаковываю файлы во временную папку, запускаю поиск grep (или PowerShell) и затем удаляю временную папку. Теперь, когда у нашего сервера мало места на диске, больше не рекомендуется разархивировать их все во временную папку. Какой эффективный способ поиска по регулярным выражениям в этих заархивированных файлах с минимальным воздействием на дисковые или сетевые ресурсы?

Ответы [ 3 ]

25 голосов
/ 09 августа 2009

zgrep в Linux. Если вы работаете в Windows, вы можете загрузить GnuWin , который содержит Windows-порт zgrep.

3 голосов
/ 11 августа 2009

Расширения сообщества 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"

позволит вам выполнять поиск без извлечения всего архива.

2 голосов
/ 09 августа 2009

В расширениях Powershell Community есть несколько связанных с zip командлетов (PSCX) . Однако я не думаю, что они будут делать то, что вы хотите (хотя я могу быть совершенно неправ в этом). Вместо этого я бы использовал .Net Zip Library (DotNetZip) , которая позволяет вам составить список имен файлов в архиве, а затем извлечь только те, которые вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...