Parallel laufende Prozesse mit xargs starten
Verwendet man find und möchte man zum Beispiel mehrere Dateien mit bunzip2 entpacken werden die bunzip2 Prozesse nacheinander gestartet:
# find . -name "firefox-8.0*" -exec bunzip2 {} \; & # ps aww | grep zip 43739 1 R+ 0:02.14 bunzip2 ./firefox-8.0.1.source.tar.bz2
Verwendet man find und xargs, werden alle Dateinamen an einen bunzip2 Prozess übergeben, welche die Dateien auch nacheinander entpackt:
# find . -name "firefox-8.0*" | xargs bunzip2 & # ps aww | grep zip 13729 1 R+ 0:01.88 bunzip2 ./firefox-8.0.1.source.tar.bz2 ./firefox-8.0b3.source.tar.bz2 ./firefox-8.0b1.source.tar.bz2 ./firefox-8.0.source.tar.bz2 ./firefox-8.0.1.tar.bz2 ./firefox-8.0b6.source.tar.bz2 ./firefox-8.0b4.source.tar.bz2
Mit der -P Option von xargs kann nun angegeben werden wieviele Prozesse parallel gestartet werden sollen. Durch die -n Option wird nun jedem bunzip2 Prozess nur ein Argument, in diesem Falle ein Dateinamen übergeben.
# find . -name "firefox-8.0*" | xargs -n1 -P4 bunzip2 & # ps aww | grep zip 14688 1 R+ 0:01.66 bunzip2 ./firefox-8.0.1.source.tar.bz2 14796 1 R+ 0:01.67 bunzip2 ./firefox-8.0b3.source.tar.bz2 14882 1 D+ 0:01.63 bunzip2 ./firefox-8.0b1.source.tar.bz2 15165 1 R+ 0:01.62 bunzip2 ./firefox-8.0.source.tar.bz2
Auf FreeBSD ist xargs standardmässig im Basissystem vorhanden. Mehr Informationen zu Sargs findet man in der Manpage xargs(1).