2009-08-08 2 views
18

Unsere tägliche Feed-Datei hat eine durchschnittliche Größe von 2 GB. Diese Dateien werden am Ende jedes Monats in einer einzelnen Zip-Datei archiviert und in einer Netzwerkfreigabe gespeichert. Von Zeit zu Zeit muss ich nach bestimmten Datensätzen in diesen Dateien suchen. Dazu verbinden Sie den Remotedesktop mit dem freigegebenen Server, entpacken Sie die Dateien in einen temporären Ordner, führen Sie die Suche in grep (oder PowerShell) aus, und löschen Sie den temporären Ordner. Da auf unserem Server derzeit wenig Speicherplatz zur Verfügung steht, wird nicht mehr empfohlen, sie alle in einen temporären Ordner zu extrahieren. Was ist eine effiziente Möglichkeit, eine Regex-Suche für diese gezippten Dateien mit minimalen Auswirkungen auf Festplatten- oder Netzwerkressourcen durchzuführen?Wie kann ich nach einem Textmuster in einer gezippten Textdatei suchen?

Antwort

22

zgrep unter Linux. Unter Windows können Sie GnuWin mit einem Windows-Port von zgrep herunterladen.

+1

Und nur zur Verdeutlichung sucht es in "normalen" Zip-Dateien, sowie 'Gzip'-Dateien. – Nate

+1

@Nate Nicht ganz richtig. Es wird gzip verwenden, das Probleme mit 'normalen' Zip-Dateien haben kann, was dazu führt, dass nur die erste gezippte Datei im Archiv entpackt wird. – dstibbe

2

In den Powershell Community Extensions (PSCX) gibt es einige zipbezogene Commandlets. Ich glaube nicht, dass sie tun würden, was Sie wollen (ich könnte mich aber völlig irren). Stattdessen würde ich verwenden. Net Zip-Bibliothek (DotNetZip), mit denen Sie im Wesentlichen die Namen der Dateien in einem Archiv auflisten und extrahieren dann nur diejenigen, die Sie wollen.

3

Die PowerShell Community Extensions (PSCX) gehören Read-Archive und Expand-Archive Cmdlets, aber nicht (noch?) Einen Navigationsanbieter, der machen würde, was Sie wollen, sehr einfach. Das heißt, Sie könnten Read-Archive und Expand-Archive verwenden. Etwas wie dieses ungetestete Bit

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

würde Sie suchen lassen, ohne das gesamte Archiv zu extrahieren.

Verwandte Themen