Skip to content

Команда xargs

Описание

Команда xargs (от eXtended ARGuments) позволяет запускать другие команды, используя вывод из стандартного ввода как список аргументов. Это особенно полезно, когда нужно применить одну и ту же команду к множеству файлов или элементов, например, удалить, скопировать или обработать их.

Она часто используется вместе с find, grep, ls и другими командами.


Синтаксис

команда | xargs [опции] другая_команда

или

xargs [опции] команда < входной_файл

Примеры использования

1. Удаление всех .tmp файлов

find /tmp -name "*.tmp" | xargs rm

Ищет все временные файлы и передаёт их в rm.

2. Обработка большого количества файлов

ls *.log | xargs cat

Выведет содержимое всех .log файлов.

Если файлов слишком много, можно использовать -n:

ls *.log | xargs -n 5 cat

Вызовет cat с группами по 5 файлов за раз.

3. Передача данных в интерактивную команду

find . -name "*.bak" | xargs -p rm

Перед удалением спросит подтверждение (-p = prompt).

4. Запуск команды для каждого файла отдельно

find . -name "*.txt" | xargs -I {} mv {} /backup/

Перемещает каждый найденный .txt файл в папку /backup.

5. Использование с grep

xargs grep "error" << EOF
file1.txt
file2.txt
EOF

Ищет слово "error" в указанных файлах.


Полезные опции

Опция Описание
-n N Разбить вход на блоки по N аргументов
-p Запрашивать подтверждение перед выполнением
-0 Использовать нулевой байт как разделитель (полезно с find -print0)
-I {} Заменять {} на входное значение
-t Показывать выполняемые команды
-r Не запускать команду, если нет входных данных
-L N Обрабатывать N строк одновременно

Примеры с опциями

1. Безопасный способ удаления с пробелами в именах

find . -name "*.mp3" -print0 | xargs -0 rm

Использует нулевой символ как разделитель, чтобы корректно обработать имена с пробелами.

2. Параллельная обработка (через parallel)

ls *.log | xargs -P 4 -n 1 gzip

Сжимает логи в 4 параллельных процессах.

3. Логирование выполняемых команд

echo "file1 file2" | xargs -t rm

Покажет команду перед выполнением:

rm file1 file2

Полезные заметки

  • xargs ограничивает длину строки аргументов системным пределом (ARG_MAX). Чтобы избежать переполнения, используйте: bash ... | xargs -n 1 команда

  • Часто используется с find, особенно с опцией -exec, но xargs может быть эффективнее при массовой обработке.

  • Для работы с JSON или сложными структурами лучше использовать jq, awk, python и т.д.


Альтернативы

Инструмент Когда использовать
find -exec Если нужен простой способ вызвать команду для каждого файла
parallel Для параллельной обработки
for цикл в shell Для более гибкой обработки
mapfile / readarray Для хранения результатов в массиве
perl / python Для сложной обработки данных

Пример работы

  1. Создайте тестовые файлы: bash touch файл1.txt файл2.txt файл3.txt

  2. Переместите все файлы через xargs: bash ls *.txt | xargs -I {} mv {} ~/Рабочий_стол/

  3. Удалите файлы с подтверждением: bash find . -name "*.tmp" | xargs -p rm


Полезные команды в связке

# Найти и удалить старые логи
find /var/log -mtime +7 -name "*.log" | xargs rm -f

# Подсчитать общее количество строк во всех .py файлах
find . -name "*.py" | xargs wc -l

# Архивировать найденные файлы
find . -name "*.txt" | xargs tar cvf текстовые_файлы.tar