Звучит просто, но именно она помогает превращать пайплайны в мощные однострочники для массовых операций.
Многие команды (
rm, cp, mv, kill) не читают список целей из stdin напрямую. Они ждут аргументы. xargs решает эту задачу: принимает поток данных, разбивает его на элементы и передаёт следующей команде уже в нужном формате.Базовый принцип
Без xargs:
echo "file1.txt file2.txt" | rm
# Не работает — rm не читает stdin
С xargs:
echo "file1.txt file2.txt" | xargs rm
# Превратится в: rm file1.txt file2.txt
Основные флаги
-n N — количество аргументов на одну команду.-I {} — заменитель (placeholder), используется когда нужно вставить значение в середину команды, а не в конец.-P N — параллельное выполнение в N процессов.-0 — разделитель — нулевой байт.-t — показать команду перед выполнением (verbose).-p — спросить подтверждение для каждой команды.Боевые примеры
Убить все процессы по имени
pgrep -f "old_script" | xargs kill -9
Удалить пустые файлы
find . -type f -empty -print0 | xargs -0 rm
Архивация найденных файлов:
find . -name "*.log" -mtime +30 -print0 | xargs -0 tar czf old_logs.tar.gz
Изменить права на всех скриптах:
find . -name "*.sh" -print0 | xargs -0 chmod +x
xargs нужен там, где поток данных нужно превратить в аргументы команды. За счёт этого обычные Unix-команды начинают работать с большими списками файлов, процессов и других объектов.
#линуксятина
