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

Основное все. В заметку можно/нужно добавить кошерных примером.