Ich versuche auszuführen, aber es nur druckt. Wie kann ich es parallel laufen lassen?Wie kann ich Skript mit Xargs nach dem Befehl find ausführen
Antwort
find . -name "recovery_script" | xargs -n1 -P8 sh
für 8 Prozesse parallel.
Vorausgesetzt, es gibt mindestens 8 Orte, an denen "recovery_script" gefunden werden kann.
Das Argument -n1
ist erforderlich, um jeweils ein Argument an sh
zu übergeben. Andernfalls wird xargs
eine angemessene Anzahl von Argumenten füttern auf einmal sh
, was bedeutet, es so etwas wie
sh dir1/recovery_script dir2/recovery_script dir3/recovery_script ...
statt
sh dir1/recovery_script
sh dir2/recovery_script
sh dir3/recovery_script
...
parallel auszuführen versucht.
Bonus: Ihr Befehl kann länger als nur einen einzigen Befehl einschließlich Optionen sein. Ich verwende oft nice
auf andere Prozesse lassen noch ohne Probleme weiter:
find . -name "recovery_script" | xargs -n1 -P8 nice -n19
wo -n19
-nice
eine Option ist, nicht zu xargs
.
(abgesehen: Wenn Sie jemals Platzhalter für -name
in find
verwenden, verwenden Sie die -print0
Option find
und die -0
Option xargs
: die Ausgabe und Eingabe durch den Null-Zeichen trennt, statt Leerzeichen (da letztere kann Teil des Dateinamens) Da Sie hier für den vollständigen Namen zu suchen, das ist kein Problem)
Vom xargs
Manpage:..
SYNTAX:
xargs
... [command [initial-Argumente]]
und
... und führt den Befehl (Standard/ist/Echo) ein oder mehrmals mit jedem Anfang -arguments gefolgt von Elementen aus der Standardeingabe gelesen.
Das Standardverhalten besteht also darin, die Argumente zu reproduzieren, die Sie xargs
geben. Ein Befehl wie sh
(vielleicht abhängig davon, welche ausführbare Datei Sie ausführen möchten) funktioniert dann.
Diese Lösung verwendet keine Xargs, sondern ein einfaches Bash-Skript. Vielleicht kann es helfen:
#!/bin/sh
for i in $(find -name recovery_script)
do
{
echo "Started $i"
$i
echo "Ended $i"
} &
done
wait
- 1. Ausführen bash -c mit xargs
- 2. Wie finde ich das Ergebnis mit xargs zum Befehl mvn?
- 3. xargs Befehl Länge Grenzen
- 4. find -exec cmd {} + vs | xargs
- 5. Locken-Header nach xargs
- 6. Shell-Skript: Ausführen des Befehls nach dem Ausführen von "Exit" -Befehl im Shell-Skript
- 7. Wie Shell-Skript mit dem Befehl AWS ausführen?
- 8. Verständnis der UNIX-Befehl xargs
- 9. Regex mit dem Befehl find in bash
- 10. Können xargs einen Subshell-Befehl für jedes Argument ausführen?
- 11. VIM Befehl ausführen nach dem Schreiben ": w"
- 12. Wie benutzt man & >> in einem xargs Befehl?
- 13. Wie find-Befehl mit Powershell
- 14. Befehl ausführen eins nach dem anderen
- 15. Aufruf des Ereignisses nach dem Befehl Ausführen
- 16. Find Befehl mit Regex für mehrere Dateierweiterungen
- 17. Kann nicht ausführen Befehl in Perl-Skript
- 18. Mount-Befehl kann keine Xargs verwenden
- 19. Kann nicht mit dem Befehl awk im Shell-Skript drucken
- 20. Wie verwende ich find Befehl mit Pipe in bash?
- 21. Wie ausgeführt Python-Skript mit dem Befehl
- 22. Wie kann ich ausführen Winkel Skript nach Onclick-Ereignis
- 23. Über die Verwendung von Linux-Befehl "xargs"
- 24. Wie bekomme ich Shell-Eingabeaufforderung zurück nach Ausführen Skript
- 25. Ausschließen von Verzeichnissen mit dem Befehl find und Ausführen eines Skripts in anderen Verzeichnissen
- 26. ConEmu halten Terminal nach dem Ausführen Befehl mit Standard-Stil
- 27. Groovy-Befehl über Jenkins ausführen: "find: fehlendes Argument zu '-exec'"
- 28. Wie kann ich dieses Shell-Skript in Python ausführen?
- 29. Skript nach serializeFileUpload ausführen
- 30. finden, xargs: Befehlskette für jede Datei ausführen
Dies ist höchstwahrscheinlich ein Duplikat; hast du versucht nach 'xargs parallel 'zu suchen? – Evert
es funktioniert nicht – Alex