Ich habe mehrere Fragen zu diesem Thema gesehen, aber mir fehlt die Fähigkeit, dies zu meinem spezifischen Problem zu übersetzen. Ich habe eine for-Schleife, die Unterverzeichnisse durchläuft und dann ein .sh-Skript für eine komprimierte Textdatei in jedem Verzeichnis ausführt. Ich möchte diesen Prozess parallelisieren, aber ich bemühe mich, Gnu parallel anzuwenden.Gnu parallel zu einer For-Schleife zu parallelisieren
Hier ist meine Schleife:
for d in ./*/ ; do (cd "$d" && script.sh); done
ich, dass ich zur Eingabe einer Liste in parallele müssen verstehen, so habe ich das versucht:
ls -d */ | parallel cd && script.sh
Während dies zu beginnen scheint, ich ein Fehler, wenn gzip versucht, eine der txt-Dateien in dem Verzeichnis zu entpacken, dass die Datei nicht existiert:
gzip: *.txt.gz: No such file or directory
Wenn ich jedoch das Original for-Schleife verwende, habe ich keine Probleme, abgesehen davon, dass es ein Jahrhundert dauert, bis es fertig ist. Außerdem erhalte ich den gzip-Fehler nur einmal, wenn ich parallel benutze, was so merkwürdig ist, wenn man bedenkt, dass ich über 1000 Unterverzeichnisse habe.
Meine Fragen sind:
Wie erhalte ich Parallel in meinem Fall zu arbeiten? Wie bekomme ich parallel dazu, die Anwendung eines .sh-Skripts auf Tausende von Dateien in ihren eigenen Unterverzeichnissen zu parallelisieren? dh - was ist die Lösung für mein Problem? Ich muss Fortschritte machen.
Was fehlt mir? Syntax, Schleife, schlechtes Skript? Ich will lernen.
Wird parallel versucht, alle diese .sh-Skripts parallel auszuführen? Warum bekomme ich keinen Fehler für jede .txt.gz Datei?
Ist parallel die beste Option für die Anwendung? Gibt es eine andere Option, die besser zu meinen Bedürfnissen passt?
Schön erklärt! –