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 файлов