Table of Contents
xargs — это связующее звено между командами Linux.
Он берёт список файлов, строк или аргументов и передаёт их другой команде пакетами.
Идеален в связке с find, grep, sed, awk и tar.
Топ-15 полезных флагов xargs#
| Флаг | Назначение |
|---|---|
-n N |
Передавать по N аргументов за один вызов |
-P N |
Параллельный запуск N процессов |
-I {} |
Шаблон для подстановки аргументов |
-0 |
Безопасная работа с пробелами и спецсимволами (используется с find ... -print0) |
-d |
Установить кастомный разделитель |
-p |
Подтверждать каждое действие перед выполнением |
-t |
Показать команду перед выполнением |
-r |
Не запускать команду, если аргументов нет |
-s N |
Ограничить максимальный размер команды |
-L N |
Обрабатывать по N строк из ввода за раз |
--max-procs=N |
Альтернатива -P, запускает процессы параллельно |
-E str |
Установить слово, которое остановит ввод |
-x |
Завершить выполнение, если команда превышает лимит |
-0 -n 1 |
Лучший вариант для надёжной пакетной обработки |
--show-limits |
Показать системные лимиты аргументов |
🟢 Уровень 1 — Базовые команды (разогрев)#
echo "hello world" | xargs
- Выводит
hello world(по умолчанию xargs вызываетecho)
echo "a b c" | xargs -n 1
- Выводит аргументы по одному на строку:
a,b,c
cat list.txt | xargs
- Склеивает содержимое
list.txtв одну строку аргументов
ls | xargs echo Файл:
- Добавляет префикс
Файл:перед каждым именем
🟡 Уровень 2 — Работа с файлами#
ls *.txt | xargs rm
- Удаляет все
.txtфайлы
find . -type f -name "*.log" | xargs wc -l
- Считает количество строк во всех
.log
ls *.png | xargs -I {} mv {} images/{}
- Перемещает все
.pngв каталогimages/
cat urls.txt | xargs wget
- Скачивает все URL из
urls.txt
find . -type f | xargs du -sh
- Показывает размер каждого найденного файла
🟠 Уровень 3 — Гибкое управление аргументами#
echo "1 2 3 4" | xargs -n 2
- Передаёт по 2 аргумента за один вызов
seq 1 10 | xargs -n 5
- Выводит числа пачками по 5 штук
printf "a\nb\nc" | xargs -d '\n'
- Использует перевод строки как разделитель
cat list.txt | xargs -I {} echo Файл: {}
- Подставляет
{}вместо каждого аргумента
find . -name "*.jpg" | xargs -p rm
- Спрашивает подтверждение перед удалением
🔵 Уровень 4 — Совместно с find#
find . -type f -name "*.txt" | xargs cat
- Склеивает содержимое всех
.txtфайлов
find . -name "*.jpg" | xargs -I {} cp {} /backup/{}
- Копирует все
.jpgв/backup/
find . -type f -print | xargs wc -l
- Считает количество строк во всех файлах
find . -name "*.c" | xargs grep -H "main"
- Ищет
mainво всех.cфайлах
find . -type f -print0 | xargs -0 rm
- Удаляет файлы с пробелами в именах безопасно
🟣 Уровень 5 — С grep, sed и awk#
grep -rl "ERROR" logs/ | xargs sed -i 's/ERROR/INFO/g'
- Меняет
ERROR→INFOво всех найденных файлах
grep -rl "DEBUG" . | xargs rm
- Удаляет все файлы, содержащие
DEBUG
grep -rlZ "FIXME" . | xargs -0 sed -i 's/FIXME/DONE/g'
- Безопасно заменяет
FIXME→DONE
cat data.csv | xargs -n 1 echo
- Выводит каждое значение CSV на новой строке
grep -rl "TODO" src/ | xargs wc -l
- Считает количество строк в файлах с
TODO
🔴 Уровень 6 — Мощные комбинации#
find . -type f -name "*.log" | xargs gzip
- Сжимает все
.logфайлы
ls *.tar | xargs -n 1 tar -xf
- Распаковывает все
.tarархивы
find . -name "*.mp4" | xargs -n 1 -P 4 ffmpeg -i {} -vn {}.mp3
- Конвертирует MP4 → MP3 в 4 потока
find . -name "*.jpg" | xargs -n 10 cp -t /backup/
- Копирует по 10 файлов за раз
find . -type f | xargs md5sum
- Считает хэши всех файлов
ls *.txt | xargs -I {} sh -c 'echo Обрабатываем {}; cat {}'
- Выполняет несколько команд для каждого файла
Уровень 7 — Гуру-режим#
find . -type f -print0 | xargs -0 -n 1 -P 8 md5sum
- Считает хэши файлов параллельно
ls *.zip | xargs -n 1 unzip -d extracted
- Распаковывает все
.zipфайлы
find src/ -name "*.c" | xargs -I {} sh -c 'gcc {} -o {}.out'
- Компилирует все
.cфайлы
cat files.txt | xargs -I {} sh -c 'mkdir -p $(dirname {}) && touch {}'
- Создаёт структуру папок и файлов из списка
find . -type f -size +100M | xargs -I {} mv {} /mnt/large_files/
- Перемещает файлы больше 100MB
find . -type f -name "*.bak" | xargs -n 50 rm
- Удаляет
.bakпакетами по 50 файлов