Пример Използване на командата "xargs"

Описание и въведение

Командата xargs обикновено се използва в командния ред, където изходът на една команда се предава като аргументи за въвеждане на друга команда.

В много случаи не е необходима специална команда като xargs, за да се постигне това, тъй като операторите "тръба" и "пренасочване" изпълняват една и съща операция. Понякога обаче има проблеми с основния тръбопровод и механизма за пренасочване, например, ако аргументите съдържат пространства, които xargs преодоляват.

Освен това xargs многократно изпълнява посочената команда, ако е необходимо, за да обработи всички предоставени й аргументи. Всъщност можете да посочите колко аргумента трябва да се четат от стандартния входен поток всеки път, когато xargs изпълнява зададената команда.

По принцип командата xargs трябва да се използва, ако изходът на една команда трябва да се използва като част от опциите или аргументите на втора команда, към която се предават данните (използвайки оператора на тръба "|"). Редовните тръби са достатъчни, ако данните са предназначени да бъдат (стандартно) вход на втората команда.

Ако например използвате командата ls за генериране на списък с имена на файлове и директории и след това преместете този списък в командата xargs, изпълняващ ехо , можете да посочите колко имена на файлове или имена на директории се обработват с ехо на всяка итерация, както следва :

ls | xargs -n 5 ехо

В този случай ехото получава пет имена на файлове или директории едновременно. Тъй като ехото добавя нов знак в края, пет имена са написани на всеки ред.

Ако изпълнявате команда, която връща големи и непредсказуеми номера (например имена на файлове), които се предават на друга команда за по-нататъшна обработка, е добра идея да управлявате максималния брой аргументи, които втората команда получава, за да се избегне претоварване и срив.

Следващата част от командния ред разделя потока от имена на файлове, създадени чрез намиране на int в групите от 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>

Заместващият низ е дефиниран като "{}". Това означава, че всички събития на "{}" в аргументите на командата се заменят с входния елемент, препратен към аргументите чрез операцията на тръбата. Това ви дава възможност да поставите входните елементи на определени позиции в аргументите на командата, която да бъде (многократно) изпълнена.