2009-08-08 5 views
18

Nasz dzienny plik danych waży średnio 2 GB. Pliki te są archiwizowane do pojedynczego pliku zip na koniec każdego miesiąca i przechowywane w udziale sieciowym. Od czasu do czasu mam potrzebę wyszukiwania określonych zapisów w tych plikach. Robię to, łącząc się przez zdalny pulpit z udostępnionym serwerem, rozpakowuję pliki do folderu tymczasowego, uruchamiam wyszukiwanie grep (lub PowerShell), a następnie usuwam folder tymczasowy. Teraz, ponieważ nasz serwer ma mało miejsca na dysku, nie jest już zalecane, aby rozpakować je wszystkie do folderu tymczasowego. Jaki jest skuteczny sposób wyszukiwania regex na tych spakowanych plikach przy minimalnym wpływie na zasoby dyskowe lub sieciowe?Jak mogę ustawić grep dla wzorca tekstowego w skompresowanym pliku tekstowym?

Odpowiedz

22

zgrep w systemie Linux. Jeśli korzystasz z systemu Windows, możesz pobrać GnuWin, który zawiera port zgratowania systemu Windows.

+1

I dla jasności, wyszukuje w "zwykłych" plikach zip, a także plikach 'gzip'. – Nate

+1

@Nate Nie do końca prawdziwe. Użyje gzip, który może mieć problemy z "zwykłymi" plikami zip, powodując rozpakowanie tylko pierwszego spakowanego pliku w archiwum. – dstibbe

2

Istnieje kilka poleceń związanych z ZIP w Powershell Community Extensions (PSCX). Nie sądzę, żeby zrobili to, co chcesz (jednak mogłem się całkowicie mylić). Zamiast tego użyłbym .Zip Library Zip Library (DotNetZip), która pozwala w zasadzie wymienić nazwy plików w archiwum, a następnie wyodrębnić tylko te, które chcesz.

3

Polecenia (PSCX) obejmują cmdlety Read-Archive i Expand-Archive, ale nie zawierają (jeszcze?) Dostawcy nawigacji, który sprawiałby, że to, co chcesz, było bardzo proste. Powiedział, że można użyć Read-Archive i Expand-Archive. Coś w rodzaju tego nietestowanego bitu

Read-Archive -Path foo.zip -Format Zip | ` 
    Where-Object { $_.Name -like "*.txt" } | ` 
     Expand-Archive -PassThru | select-string "myRegex" 

pozwoliłoby ci wyszukiwać bez wyodrębniania całego archiwum.

Powiązane problemy