Обычно xargsиспользуется для случаев, когда вы передадите (с символом |) что-то из одной команды в другую ( Command1 | Command2), но выходные данные из первой команды не будут правильно получены в качестве входных данных для второй команды.
Обычно это происходит, когда вторая команда не обрабатывает ввод данных через стандартный ввод (stdin) правильно (например: несколько строк в качестве ввода, способ установки строк, символы, используемые в качестве ввода, несколько параметров в качестве ввода, тип данных, полученный как вход и т. д.). Чтобы дать вам быстрый пример, протестируйте следующее:
Пример 1:
ls | echo- Это ничего не сделает, так echoкак не знает, как обрабатывать ввод, который он получает. Теперь в этом случае, если мы используем xargsего, он будет обрабатывать ввод таким способом, который может быть корректно обработан echo(например: как одна строка информации)
ls | xargs echo- Это выведет всю информацию из lsодной строки
Пример 2:
Допустим, у меня есть несколько файлов goLang в папке с именем go. Я бы посмотрел на них примерно так:
find go -name *.go -type f | echo- Но если символ трубы там и echoв конце, он не будет работать.
find go -name *.go -type f | xargs echo- Здесь это будет работать благодаря, xargsно если бы я хотел, чтобы каждый ответ от findкоманды в одной строке, я сделал бы следующее:
find go -name *.go -type f | xargs -0 echo- В этом случае тот же вывод из findбудет показан как echo.
Команды, такие как cp, echo, rm, lessи другие, которым нужен лучший способ обработки ввода, получают преимущество при использовании с xargs.