Ich habe ein Python-Skript (nennen wir es myscript.py
) Ich möchte für eine Reihe von Dateien, die in einer verschachtelten Verzeichnisstruktur gelten. Ich werde die Aufrufe dieses Skripts parallel auf einer Cluster-Umgebung ausführen, daher möchte ich zu diesem Zweck ein kurzes Bash-Skript schreiben.rekursiv navigieren das Dateisystem, um Dateien in Paaren zu analysieren
So Paare von Dateien wie xyz_1.gz
und xyz_2.gz
gegeben, die in Ordnern wie verschachtelt sind:
A > ... > C1 > xyz_1.gz
A > ... > C1 > xyz_2.gz
A > ... > C1 > bunch of other files
A > ... > C2 > xyy_1.gz
A > ... > C2 > xyy_2.gz
A > ... > C2 > bunch of other files
A > ... > C3 > zzz_1.gz
A > ... > C3 > zzz_2.gz
A > ... > C3 > bunch of other files
A > B > some other things
oben Es ist ein dummes Beispiel, aber ich hoffe, dass es die Struktur zumindest vermittelt.
Ich möchte in der Lage sein, über die Verzeichnisstruktur zu durchlaufen und mein Skript aufrufen:
myscript.py xyz_1.gz xyz_2.gz outputfile
Derart, dass die Ausgabedateien in den entsprechenden Ordner landen.
meisten rekursiven Lösungen, die ich gesehen habe bisher entweder find
oder grep
für jede einzelne Datei verwenden, jedoch muss ich die Lage als gut, sie paarweise zu erhalten und auf die Festplatte an der entsprechenden Stelle zu schreiben.
Irgendwelche Vorschläge?
EDIT: Nach den Antworten, die ich bisher habe, wollte ich, dass die folgenden drei Parameter klären, werden nicht im Voraus mir bekannt:
- Tiefe Unterverzeichnisse die GZ-Dateien zu halten, dh ich weiß nicht, wie viele Zwischenverzeichnisse existieren zwischen
- Namen der Unterverzeichnisse
- Namen der Dateien, mit der Ausnahme, dass sie neben dem _1/_2 Suffix identisch sind
Ich mag die Idee, die Ordner von 'finden' und Iterieren über sie zu bekommen, um zu sehen, ob die Dateien existieren. Wie ich jedoch in meinem Beitrag zu der Frage erwähnt habe, weiß ich nicht, wie die Dateien heißen, außer sie haben das Format xxx_ [1/2] .gz – posdef
@posdef, ich bin krank zuhause, also mein Script-Fu ist im Moment etwas außer Form. Ich werde versuchen, die Antwort einige Tage später zu aktualisieren. Grobe Umrisse: finde alle '_1.gz' Dateien und setze jedem Zeilennamen den Namen + Stiel des Dateinamens voran (Stem == alles außer' _1.gz'); Mach das gleiche mit '_2.gz' Dateien; Führen Sie die Listen über den Befehl 'join' aus. (Sie können das gleiche in der Python mit Wörterbüchern tun: Schlüssel ist der Name + Stamm des Dateinamens, Wert ist der Dateiname; finden Sie gemeinsame Schlüssel in den beiden Dicts) – Dummy00001
Kein Problem, Kumpel, ich werde es herausfinden :) – posdef