De exec
-optie van find voert per gevonden bestand een bepaald commando uit.
Xargs daarentegen voert een bepaald commando uit op vele bestanden. Dat gaat
aanzienlijk sneller. Het voorbeeld bij exec kan met xargs zo worden gedaan:
find /usr/src/linux -name "*.c" xargs grep -l foo.
Het -teken zorgt ervoor dat de output van het ene programma wordt
doorgegeven aan het andere programma.
Bestandsnamen (en directorynamen) met spaties erin zullen xargs verwarren,
omdat hij spaties ziet als een teken dat de volgende bestandsnaam eraan komt.
Om dat probleem te verhelpen moet je de optie -print0
(met het cijfer nul,
niet de letter o) gebruiken i.p.v. -print
bij grep (zodat er een null
characters tussen de bestandsnamen komt) en de optie -0
bij xargs, zodat
xargs het null character ziet als bestandsnaamonderscheider.
Normaal gesproken werkt xargs automatisch, maar door commando's als rm kan om
bevestiging gevraagd worden. Gebruik dan de optie p
om xargs interactief
te maken.
Het commando grep -l foo `find /usr/src/linux -name "*.c"
'
zal mislukken, doordat het commando tussen backquotes een langere output heeft
dan de maximale lengte die een commando mag hebben.