xargs – polecenie uniksowych i większości uniksopodobnych systemów operacyjnych, używane do budowania i wykonywania poleceń ze standardowego wejścia. Jądro Linuxa o wersji do 2.6.23 nie może pobierać dowolnie długiej listy argumentów[1], więc zadaniem xargs jest podzielenie jej na wystarczająco małe podlisty.
Na przykład polecenie:
rm /path/*
lub
rm `find /path -type f`
może spowodować błąd i wyświetlenie komunikatu: "Argument list too long" jeżeli w /path
znajduje się zbyt wiele plików. Jednakże poniższa wersja (odpowiednik rm `find /path -type f`
) nie powinna już sprawiać kłopotów:
find /path -type f -print0 | xargs -0 rm
W tym przykładzie, find
przesyła na wejście xargs
długą listę nazw plików. Xargs
dokonuje podziału na podlisty i dopiero wtedy wywołuje polecenie rm
dla każdej z nich. To polecenie jest wydajniejsze niż gdybyśmy chcieli napisać:
find /path -type f -exec rm '{}' \;
co spowoduje wywołanie rm
dla każdego, pojedynczego pliku. Warto jednak zwrócić uwagę na to, że w nowszych wersjach find
poniższy wariant wykonuje dokładnie to samo, co wersja z użyciem xargs
:
find /path -type f -exec rm '{}' +
xargs często wykazuje się takim samym działaniem, jak backquote, lecz jest on bardziej uniwersalny i okazuje się bezpieczniejszym gdy na wejściu pojawiają się znaki białe lub specjalne. Dobrze łączyć go z poleceniami zwracającymi długie listy plików, jak chociażby find, locate, czy grep. Musimy jednak pamiętać wtedy o parametrze -0, jako że bez niego xargs nie radzi sobie najlepiej z nazwami zawierającymi ', " i spacje.