Ich arbeite an SunOS 5.10. Ich habe einen Ordner, der etwa 200 Zip-Dateien enthält. Jede Zip-Datei enthält nur eine Textdatei. Ich möchte in allen Textdateien in allen ZIP-Dateien nach einer bestimmten Zeichenfolge suchen.
Ich habe dies versucht (was nach einer Textdatei in der Zip-Datei sucht, die den String "ORA-" enthält), aber es hat nicht funktioniert.
zipgrep ORA-1680 *.zip
Was ist das Richtige daran, ohne die zip-Dateien zu dekomprimieren?
Antworten:
Es ist im Allgemeinen nicht möglich, nach Inhalten in einer komprimierten Datei zu suchen, ohne sie auf die eine oder andere Weise zu dekomprimieren. Da zipgrep nur ein Shellscript ist und unzip und egrep selbst umschließt, können Sie es genauso gut manuell tun:
Wenn Sie nur die Liste der passenden ZIP-Dateien benötigen, können Sie Folgendes verwenden:
Auf diese Weise dekomprimieren Sie nur nach stdout (dh in den Speicher), anstatt die Dateien auf die Festplatte zu dekomprimieren. Sie können natürlich nur
grep -a
die ZIP-Dateien versuchen, aber je nach Inhalt der Datei und Ihrem Muster erhalten Sie möglicherweise falsch-positive und / oder falsch-negative Ergebnisse.quelle
unzip -c
dekomprimiert die Datei auf stdout. Die gesamte unkomprimierte Datei wird nirgendwo anders geschrieben.unzip
verwendet-p
für das Streamen auf Pipe!zipgrep
nimmt eine einzelne Datei. Damit es über mehrere Dateien hinweg funktioniert, fügen Sie es in eine Schleife ein:quelle
for i in *.zip; do zipgrep TextToSearch $i && echo $i; done
Das AVFS- Dateisystem zeigt eine Ansicht des Dateisystems an, in dem auf jede Archivdatei
/path/to/foo.zip
als Verzeichnis zugegriffen werden kann~/.avfs/path/to/foo.zip#
. Es ist ein FUSE- Dateisystem, das Sie unter Solaris installieren können. AVFS bietet schreibgeschützten Zugriff auf die gängigsten Archivdateiformate.quelle