Задача xargs
, предназначенная для решения, заключается в том, что существует ограничение на размер командной строки оболочки. И этот предел был довольно маленьким. В наши дни ограничение достаточно велико, но вы все равно можете достаточно легко его превысить, и в этом случае xargs
по-прежнему является полезным инструментом.
Так что xargs
ожидает, что вызываемая команда может принимать несколько параметров и использовать их все. Это довольно часто; рассмотрим grep
или ls -l
или wc
или ... Что делает xargs
, так это многократно собирает столько аргументов, сколько может поместиться в вызове команды, и вызывает команду со всеми из них.
Таким образом, он принимает входной поток, состоящий из ряда аргументов. По умолчанию эти аргументы разделяются пробелами, поэтому в строке может быть несколько аргументов. Но поскольку в наши дни в именах файлов чаще встречаются пробелы, эта функция xargs
стала помехой. Можно было бы сделать каждую строку во входном файле отдельным аргументом, но наиболее общим решением является разделение аргументов символом NUL, что позволяет аргументу включать символ новой строки.
(Аргументы к утилитам оболочки не могут включать символы NUL. Поэтому использование NUL в качестве разделителя не добавляет никаких ограничений.)
Вы можете задать xargs
ваше собственное максимальное количество аргументов для использования для один вызов. И вы даже можете установить этот максимум на 1. Таким образом, вы можете, если хотите, использовать xargs
, чтобы запустить команду для каждого из аргументов в файле. Это иногда полезно, но не очень эффективно. Обычно лучшим решением является написание команд для нескольких аргументов, как в оригинальном проекте. Но если вы хотите использовать xargs
таким образом, посмотрите опцию командной строки -n
, среди других возможностей.