Auflisten von Dateien, einschließlich Archivinhalten

1

Gibt es eine Methode, um in der Shell alle Dateien zu finden, die mit einem Dateimuster übereinstimmen, einschließlich der Dateien in Archiven (speziell: zip-Archive)?


Das Simulationspaket "VASP" erzeugt unter anderem Dateien mit dem Namen "OUTCAR". Diese Dateien sind jetzt auf Hunderte von Ordnern verteilt, die meisten, aber nicht alle, wurden komprimiert, um inkrementelle Sicherungen zu beschleunigen, indem die Unordnung der Dateien verringert wurde. Ich möchte jetzt alle komprimierten und nicht komprimierten OUTCAR-Dateien als Skript ausführen.

Natürlich könnte ich ein Skript schreiben, das "find" verwendet, um die entpackten Dateien zu finden, und eine Kombination aus find, grep und unzip, um die entpackten Dateien zu finden, aber eine Standardlösung, falls vorhanden, wäre vorzuziehen, da dies leicht möglich wäre Behandle ZIP-Dateien wie schreibgeschützte Ordner in meinen Skripten.

Im Idealfall gibt es eine Reihe von Befehlen, die das Verhalten von allgemeinen Shell-Befehlen emulieren cat, grepmit der findAusnahme, dass sie ZIP-Dateien als Teil von Dateinamen zulassen.

Ich würde solche Tools nicht benötigen, um geschachtelte Zip-Dateien verarbeiten zu können. Der Grund, warum ich von .tar.gzzu gewechselt bin , .zipist das Vorhandensein eines Dateiindexes, auf den zugegriffen werden kann, ohne etwas zu extrahieren (ein ziemlicher Geschwindigkeitsunterschied für 100-MB-Archive mit hoher Komprimierung), der teilweise verloren geht, wenn verschachtelte Archive betroffen sind.

Nebenbei bemerkt verwende ich Windows 7 mit Cygwin (obwohl dies nur einen Unterschied in Bezug auf die Leistung der Prozesserstellung bedeuten sollte).

kdb
quelle
Sie möchten alle Dateien (gezippt oder nicht) finden, deren Name OUTCARrichtig ist? Nicht in den Dateien, die die Zeichenfolge enthalten, sondern nur in den Dateien, die so benannt sind?
Terdon

Antworten:

0

Sie können den Inhalt der Zip-Datei wie folgt auflisten

 unzip -l file.zip

Bearbeiten: Eigentlich könnte diese Antwort sehr hilfreich für das sein, was Sie erreichen wollen

Moti Korets
quelle
Unter Windows ist auch mit cygwin keine Sicherung möglich. Ich habe einmal versucht, Dokan zu verwenden, aber ohne nützliche Ergebnisse. Ich nehme an, ich werde mich nur um ein findVerhalten bei der Emulation von Klebecode kümmern.
kdb
0

Wenn Sie unter OSX arbeiten, probieren Sie die gleichen Dienstprogramme aus, denen ein z vorangestellt ist. Sie durchsuchen sowohl komprimierte als auch nicht komprimierte Dateien.

Aus den Manpages:

zgrep, zegrep, and zfgrep act like grep, egrep, and fgrep, respectively, but accept input files compressed with the compress(1) or gzip(1) compression utilities.

und

zcat  is identical to gunzip -c.

Unter Debian Linux

zgrep

ist ein Script-Wrapper, der die Zip-Datei aus dem Archiv entfernt und sie durchgreift, sodass Sie das zumindest nicht selbst schreiben müssten.

numerische Darstellung
quelle
Diese Tools funktionieren nicht in Zip-Archiven. Nach der Fehlermeldung zu urteilen, würden sie funktionieren, wenn sie nur eine einzige Datei enthielten, aber das ist nicht der Zweck von * .zip-Archiven.
kdb
0

Es sollte nur ein paar Minuten dauern, um das Beispiel python os.walk so zu erweitern, dass a) die Dateien aufgelistet werden, die Ihrem Muster entsprechen (in den Dateilisten mit re) und b) wenn es auf eine gezippte / tared / etc-Datei stößt, die geöffnet wird Verwenden Sie die entsprechende Bibliothek und passen Sie das Muster an die Dateinamen an. (Tut mir leid, ich kann es nicht wirklich für dich schreiben, da ich zur Arbeit muss).

Steve Barnes
quelle