Команда 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 |
Для сложной обработки данных |
Пример работы
-
Создайте тестовые файлы:
bash touch файл1.txt файл2.txt файл3.txt
-
Переместите все файлы через
xargs
:bash ls *.txt | xargs -I {} mv {} ~/Рабочий_стол/
-
Удалите файлы с подтверждением:
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