xargs используется для автоматического генерации аргументов командной строки, основанных (обычно) на списке файлов.
Существует несколько причин использовать его, о котором я еще не упоминал выше:
find . -name '*.c' -exec grep {}\; будет генерировать один процесс grep для каждого файла - это обычно считается плохой практикой и может наложить большую нагрузку на систему, если обнаружено много файлов. Если есть много файлов, команда grep 'stdlib.h' $(find . -name '*.c'), скорее всего, не сработает, потому что вывод операции $(...) превысит максимальную длину командной строки оболочки. Как упоминалось выше, обычно хорошей практикой использовать аргумент -print0 для find в этом сценарии и аргумент -0 для xargs, так что имена файлов с определенными символами (например, кавычками или пробелами) все еще обрабатываются правильно.