Ich habe eine große Textdatei in mehrere Sätze kleinerer Dateien aufgeteilt, um Leistungstests durchzuführen. Es gibt eine Reihe von Verzeichnissen wie folgt:
%Vor%Es ist wichtig zu beachten, dass in jedem Verzeichnis eine zunehmende Anzahl von Dateien vorhanden ist. Was ich tun muss, ist eine ausführbare Datei für jede der Textdateien in den Ausgabeverzeichnissen auszuführen. Der Befehl sieht in etwa so aus wie in einer einzigen Datei:
%Vor%Hier ist der Parameter -i die Eingabedatei und der Parameter -o der Ausgabeort.
In C # würde ich die Verzeichnisse durchlaufen, um die Liste der Dateien in jedem Ordner zu erhalten, und dann die Zeilen durchlaufen, um die Befehlszeilen auszuführen. Wie durchlaufe ich eine Verzeichnisstruktur wie diese mit bash und führe den Befehl mit den richtigen Parametern basierend auf dem Ort und den Dateien an diesem Ort aus?
Für solche Dinge verwende ich immer find zusammen mit xargs :
%Vor%Nun, da Ihr Skript nur eine Datei nach der anderen verarbeitet, verwenden Sie -exec (oder -execdir ) direkt wie vorgeschlagen, ist genauso effizient, aber ich bin es gewohnt, xargs zu verwenden, da dies im Allgemeinen viel effizienter ist, wenn ein Befehl eingegeben wird, der viele Argumente gleichzeitig verarbeitet. So ist es ein sehr nützliches Werkzeug, um in seinem Utility-Gürtel zu bleiben, also dachte ich, dass es erwähnt werden sollte.
Wie andere vorgeschlagen haben, verwenden Sie find(1)
:
Tags und Links command-line linux bash directory traversal