Bash: wie traverse directory-Struktur und die Befehle ausführen?
Ich gespalten haben eine große text-Datei in eine Anzahl von Gruppen von kleineren, für die performance-Tests, die ich mache. Es gibt eine Reihe von Verzeichnissen wie diesem:
/home/brianly/output-02 (contains 2 files myfile.chunk.00 and myfile.chunk.01)
/home/brianly/output-04 (contains 4 files...)
/home/brianly/output-06 (contains 6 files...)
Es ist wichtig zu beachten, dass es eine zunehmende Anzahl von Dateien in jedem Verzeichnis. Was ich tun müssen, ist, eine ausführbare Datei auszuführen, die gegen jede der text-Dateien in der Ausgabe-Verzeichnisse. Sieht der Befehl wie diesen für eine einzelne Datei:
./myexecutable -i /home/brianly/output-02/myfile.chunk.00 -o /home/brianly/output-02/myfile.chunk.00.processed
Hier den parameter-i die Eingabe-Datei und parameter-o ist der output location.
In C# würde ich Schleife die Verzeichnisse, die Liste der Dateien in jedem Ordner, dann Schleife über die Ausführung der befehlslinien. Wie kann ich die traverse eine Verzeichnisstruktur wie diese bash verwenden, und führen Sie den Befehl mit den richtigen Parametern, basierend auf den Speicherort und Dateien in diesem Speicherort?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für diese Art der Sache, die ich immer verwenden finden zusammen mit xargs:
Nun seit Ihr Skript verarbeitet nur eine Datei zu einem Zeitpunkt, mit -exec (oder -execdir) direkt mit finden, wie schon vorgeschlagen, ist nur so effizient, aber ich bin es gewohnt, mit xargs, wie das ist in der Regel wesentlich effizienter bei der Fütterung ein Befehl Betrieb auf viele Argumente auf einmal. Es ist somit ein sehr nützliches Werkzeug, um zu halten in einem Dienstprogramm-Gürtel, so dass ich dachte, es sollte erwähnt werden.
Etwas wie:
Als andere haben vorgeschlagen, die Verwendung
finden(1)
:Sich aus der information, es klingt, als wäre dies eine ganz einfache übersetzung Ihres C# - Idee.
Dass das, was die
find
Befehl ist für.http://linux.die.net/man/1/find
Verwenden Sie find und exec. Haben Sie einen Blick auf folgende
http://tldp.org/LDP/abs/html/moreadv.html