Уже не раз сталкивался с непонятной утилитой, присутствующей исключительно в конвеерах с другими программами, такими как find.
КЛЮЧИ:-t или --verbose выводит выполняемую команду, иначе выполняет тихо
echo "file1 file2 file3" | xargs -t touch
-p или --interactive запрашивает подтверждение
echo "file1 file2 file3" | xargs -p touch
-n или --max-args указывает количество аргументов, передаваемых второй команде за один раз. Вторая команда будет вызываться, пока не закончатся все аргументы.
echo 1 2 3 4 5 6 | xargs -n3 -t touch
Простая интерактивная запрашивалка на удаление каждого элемента выдачи ls
ls | xargs -n1 -p rm
-l или --max-lines указывает количество строк, передаваемых одной команде за раз. Она будет вызываться, пока параметры не закончатся:
ls | xargs -p -l4 rm
-i или --replace позволяет не просто передать второй команде аргументы из вывода первой команды, а вставить их в конкретное место, обозначенное двумя фигурными скобками {}.
echo Вася | xargs -i echo Меня зовут {} Сидоров.
NOTE: вывод первой команды будет разбиваться на отдельные строки только по символам новой строки \n.
NOTE: --max-lines(-l) и --replace (-i) и --max-args (-n) являются взаимоисключающими! Использоваться будет последнее.
Исключением из этого правила является указание опции -n со значением 1 после опции -i — в этом случае опция -n игнорируется.
-d или --delimiter позволяет задать другой разделитель вместо пробела.
echo -n "file1,file2,file3" | xargs -d ',' -n1 -t touch
-a или --arg-file позволяет читать аргументы из файла вместо стандартного ввода.
xargs -t -l1 -a ips.txt ping -c1
-0 или --null. заставляет считать #00 концом строки.
NOTE: Утилита xargs чаще всего используется в сочетании с командой find. Команда find позволяет найти определенные файлы, а xargs — выполнинить над ними нужные операции.
NOTE: Чтобы избежать проблем с именами файлов, которые содержат пробелы, нужно использовать опцию -print0, которая заставит find выводить имя файла с нулевым символом в конце. Этот вывод может быть правильно интерпретирован xargs с помощью опции -0 или --null.
-P или --max-procs позволяет запустить параллельно нескольких команд отдельными процессами.
ls {1..3} | xargs -n1 --max-procs=3 gzip
Примеров по этим ключам ещё не записал:
-E, -e, --eof - индикатор конца файла, все символы после вхождения этой строки игнорируются;
-o, --open-tty - открывать новый терминал для дочерних процессов;
-r, --no-run-if-empty - если входной поток данных пустой, команда не будет выполнена;
--show-limits - посмотреть ограничения на длину параметров в командной строке;
Ссылки: