Xargs
Материал из База знаний проекта Russian Fedora
xargs - разбивает входной поток на аргументы и передает их выполнение любой команде (по умолчанию echo). Читает либо со стандартного ввода, либо через pipe.
$ echo 1 2 3 4 | xargs 1 2 3 4
идентично
$ echo 1 2 3 4 > file $ xargs < file 1 2 3 4
В случае
$ echo 1 2 3 4 | xargs
входной поток разбивается на 4 аргумента и с ними вызывается (одна) команда echo.
Ключ -t(режим трассировки) позволяет увидеть какая именно команда была вызвана
$ echo 1 2 3 4 | xargs -t /bin/echo 1 2 3 4 1 2 3 4
Можно команду вызывать много раз с одним аргументом, для этого служит -n
$ echo 1 2 3 4 | xargs -n 1 1 2 3 4
или с двумя
$ echo 1 2 3 4 | xargs -n 2 1 2 3 4
Чтоб задать признак конца потока нужен -E
$ echo 1 2 '#' 3 4 | xargs -E '#' 1 2
Задать разделитель аргументов -d
$ echo '1-2-3-4' | xargs -d '-' -n 1 1 2 3 4
-0 в качестве разделителя используется нуль-терминатор нужен для find -print0, который после каждого имени файла (которое может содержать пробельные символы) вставляет нуль-терминатор
$ find -type d -print0 | xargs -0 file ./Hard/AC DC/01-T.N.T (1975): directory ./Hard/AC DC/02-High Voltage (1976): directory ./Hard/AC DC/03-Dirty Deeds Done Dirt Cheap (1976): directory ./Hard/AC DC/04-Powerage (1978): directory
А еще веселая штука -S позволяет задавать слово, вместо которого будет вставляться аргумент.
$ ls | xargs -I file echo file file cditemmodel.cpp cditemmodel.cpp cditemmodel.h cditemmodel.h changelog.txt changelog.txt contentdownloader.cpp contentdownloader.cpp contentdownloader.h contentdownloader.h
Основное все. В заметку можно/нужно добавить кошерных примером.
