Гид по технологиям

Как и зачем использовать xargs в Linux

• 5 min read • Linux • Обновлено 24 Nov 2025
xargs в Linux: как использовать и лучшие практики
xargs в Linux: как использовать и лучшие практики

Трубы с клапанами

xargs — это утилита, которая преобразует стандартный ввод в список аргументов для другой команды. Она особенно полезна, когда одна команда выдаёт список (например, find), а другая команда принимает только аргументы, а не поток stdin.

Что делает xargs и зачем он нужен

xargs читает строки из stdin и вызывает указанную команду с этими аргументами. Если список аргументов становится слишком длинным для одного вызова команды, xargs автоматически разделит их на несколько вызовов, чтобы не превысить лимит длины командной строки.

Кратко:

  • Принимает вывод одной команды и превращает его в аргументы для другой.
  • Избегает ошибок “argument list too long” при большом числе файлов.
  • Более эффективен по сравнению с многократным запуском процесса для каждой строки.

Базовый синтаксис

Простой шаблон команды:

xargs [опции] команда

Например, если у вас есть команда, выдающая список имён файлов, и вы хотите удалить их, можно написать:

find . -name '*.log' -print | xargs rm

Однако этот вариант небезопасен для имён файлов с пробелами или спецсимволами. Лучше использовать нулевой разделитель:

find . -name '*.log' -print0 | xargs -0 rm --
  • -print0 у find выводит имена файлов, разделённые NUL (пустой байт).
  • -0 у xargs читает NUL-разделённый ввод.
  • – у rm завершает список опций и защищает от имён, начинающихся с “-“.

Частые варианты и полезные опции

  • -0 — читать нулевой разделитель (совместно с find -print0)
  • -n N — передавать не более N аргументов за один вызов
  • -P N — запускать до N процессов параллельно (GNU xargs)
  • -I {} — шаблон замены в команде (для позиционной подстановки)
  • -r — не запускать команду, если нет ввода

Примеры:

# Безопасное удаление старых файлов (90 дней):
find /path/to/dir -mtime +90 -print0 | xargs -0 rm --

# Параллельное сжатие файлов (4 процесса):
find . -name '*.txt' -print0 | xargs -0 -P 4 -n 1 gzip

# Подстановка в середину команды:
ls | xargs -I {} echo File: {}

Частые ошибки и когда xargs не подойдёт

  • Имена файлов с переводом строки — если инструмент выводит имена с LF внутри, даже -print0/-0 решит проблему только при корректном использовании.
  • Если команда сама ожидает stdin (не аргументы), xargs может быть не нужен.
  • Некоторым задачам лучше подходит -exec … +: когда нужно точное управление местом подстановки и экранирования.

Пример альтернативы: find с -exec … +

# find вызывает rm группами, подобно xargs, но без промежуточной обработки stdin
find . -name '*.log' -exec rm -- {} +

-exec … + обычно безопаснее по экранированию, но у него меньше гибкости для параллельного запуска и сложных шаблонов замены.

Альтернативы и расширения

  • find -exec … + — встроенная альтернатива для групповых вызовов команд.
  • GNU parallel — более мощная и гибкая замена, поддерживает параллелизм и подробный контроль.
  • while read -r — цикл в оболочке для построчной обработки (полезно для кастомной логики).

Пример с while:

find . -name '*.sha1' -print0 | while IFS= read -r -d '' file; do
  process "$file"
done

Шпаргалка: команды и шаблоны

ЦельКоманда — пример
Безопасно удалить файлы с пробеламиfind . -name “*.log” -print0xargs -0 rm –
Параллельно обработать файлыfind . -type f -print0xargs -0 -P 8 -n 1 gzip
Точная подстановкаecho a b cxargs -I {} echo “item: {}”
Ограничить количество аргументовlsxargs -n 10 echo

Рекомендации по безопасности и надёжности

Важно: команды вроде rm — потенциально опасны. Всегда сначала тестируйте команду с echo или с флагом –dry-run (если есть) и проверяйте вывод.

Проверочные приёмы:

  • Замените команду на echo, чтобы увидеть, какие аргументы будут переданы: find … | xargs -0 echo
  • Используйте -print0 и -0 для безопасной обработки имён с пробелами и спецсимволами.
  • Добавляйте – для команд, которые могут принять опции из имён файлов.

Роль-based чек-лист (для администратора / разработчика)

  • Системный администратор:
    • Проверить резервные копии перед массовыми удалениями.
    • Использовать -print0 и -0 для безопасности.
    • Пробежать dry-run через echo.
  • Девопс / CI-инженер:
    • Использовать -P для ускорения обработки в параллельных задачах.
    • Логировать ошибки и успешные выполнения.
  • Разработчик:
    • Для сложной фильтрации предпочесть скриптовый цикл с while read.
    • Для массовой обработки больших наборов файлов рассмотреть GNU parallel.

Короткий пример: удалить файлы старше 90 дней (безопасно)

find /var/log/myapp -mtime +90 -type f -print0 | xargs -0 -r rm --

Здесь -r предотвращает запуск rm, если список пуст.

Мини-глоссарий

  • xargs — утилита для превращения stdin в аргументы командной строки.
  • stdin — стандартный поток ввода (обычно ввод из предыдущей команды в конвейере).
  • -print0 / -0 — использование NUL-байта как разделителя для безопасной передачи имён файлов.
  • -exec … + — опция find, которая группирует аргументы и вызывает команду эффективнее, чем -exec … ;

Краткое резюме

xargs — простой и мощный инструмент для передачи результатов одной команды в другую через аргументы. Он помогает обходить ограничение длины списка аргументов и эффективнее обрабатывать файлы, особенно вместе с find. Всегда проверяйте команды перед удалением и используйте нулевые разделители для безопасной обработки имён с пробелами.

Примечание: если вам нужен параллелизм и более гибкая обработка, рассмотрите GNU parallel. Если вам важна простота и безопасность экранирования — используйте find -exec … +.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро