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?
18
A
Antwort
22
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.
Und nur zur Verdeutlichung sucht es in "normalen" Zip-Dateien, sowie 'Gzip'-Dateien. – Nate
@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