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
, grep
mit der find
Ausnahme, 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.gz
zu gewechselt bin , .zip
ist 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).
OUTCAR
richtig ist? Nicht in den Dateien, die die Zeichenfolge enthalten, sondern nur in den Dateien, die so benannt sind?Antworten:
Sie können den Inhalt der Zip-Datei wie folgt auflisten
Bearbeiten: Eigentlich könnte diese Antwort sehr hilfreich für das sein, was Sie erreichen wollen
quelle
find
Verhalten bei der Emulation von Klebecode kümmern.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:
und
Unter Debian Linux
ist ein Script-Wrapper, der die Zip-Datei aus dem Archiv entfernt und sie durchgreift, sodass Sie das zumindest nicht selbst schreiben müssten.
quelle
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).
quelle