Командата xargs обикновено се използва в командния ред, където изходът на една команда се предава като аргументи за въвеждане на друга команда.
В много случаи не е необходима специална команда като xargs, за да се постигне това, тъй като операторите "тръба" и "пренасочване" изпълняват една и съща операция. Понякога обаче има проблеми с основния механизъм за пренасочване и пренасочване, например ако аргументите съдържат интервали, които xargs преодоляват.
Освен това xargs многократно изпълнява посочената команда, ако е необходимо, за да обработи всички предоставени й аргументи. Всъщност можете да посочите колко аргумента трябва да се четат от стандартния входен поток всеки път, когато xargs изпълнява зададената команда.
По принцип командата xargs трябва да се използва, ако изходът на една команда трябва да се използва като част от опциите или аргументите на втора команда, към която се предават данните (използвайки оператора на тръба "|"). Редовните тръби са достатъчни, ако данните са предназначени да бъдат (стандартно) вход на втората команда.
Ако например използвате командата ls за генериране на списък с имена на файлове и директории и след това преместете този списък в командата xargs, изпълняващ ехо, можете да посочите колко имена на файлове или имена на директории се обработват с ехо на всяка итерация, както следва :
ls | xargs -n 5 ехо
В този случай ехото получава пет имена на файлове или директории едновременно. Тъй като ехото добавя нов знак в края, пет имена са написани на всеки ред.
Ако изпълнявате команда, която връща големи и непредсказуеми бройни елементи (например имена на файлове), които се предават на друга команда за по-нататъшна обработка, е добра идея да управлявате максималния брой аргументи, които втората команда получава, за да се избегне претоварване и срив.
Следващата част от командния ред разделя потока от имена на файлове, създадени чрез намиране на групи от 200, преди да премине към командата cp, която ги копира в резервно копие директория.
намерете ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup
Елементът "./" в командата find указва текущата директория за търсене. Аргументът тип "f" ограничава търсенето до файлове, а флагът "-name" * .txt "допълнително филтрира всичко, което няма разширение .txt. -i флаг в xargs сигнали, че {} означението представлява всяко име на файла на парата.
Следващата команда намира файлове с име в или под директория / tmp и ги изтрива.
find / tmp - име ядро-тип f -print | xargs / bin / rm -f
Имайте предвид, че това ще работи неправилно, ако има имена на файлове, съдържащи нови линии, единични или двойни кавички или интервали. Следващата версия обработва имената на файловете по такъв начин, че имената на файлове или директории, съдържащи единични или двойни котировки, интервали или нови редове, се обработват правилно.
find / tmp - име ядро - тип f -print0 | xargs -0 / bin / rm -f
Вместо на -i можете също да използвате опцията -I флаг, който определя низа, която се заменя от входния ред в командните аргументи, както в този пример:
ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
Заместващият низ е дефиниран като "{}". Това означава, че всички събития на "{}" в аргументите на командата се заменят с входния елемент, препратен към аргументите чрез операцията на тръбата. Това ви дава възможност да поставите входните елементи на определени позиции в аргументите на командата, която да бъде (многократно) изпълнена.