[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rabota-v-cli-bash-kak-ispolzovat-xargs":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},172,"kak-ispolzovat-xargs",4,"rabota-v-cli-bash","Работа в CLI (Bash)","💻","Как использовать xargs?","**`xargs`** — команда, которая читает данные из stdin и передаёт их как аргументы другой команде. Это мост между выводом одной команды (через пайп) и аргументами командной строки другой.\n\nАналогия: если пайп `|` — это конвейерная лента, подающая данные на вход, то `xargs` — это работник, который снимает предметы с ленты и вкладывает их в руки следующему работнику (команде), который не умеет брать предметы с ленты сам.\n\n### Зачем нужен xargs\n\nМногие команды (`rm`, `chmod`, `mv`, `cp`) принимают аргументы командной строки, но не читают stdin. Пайп `|` передаёт данные в stdin, а `xargs` конвертирует stdin в аргументы:\n\n```bash\n# Не работает — rm не читает stdin\nfind . -name \"*.tmp\" | rm\n\n# Работает — xargs передаёт имена файлов как аргументы rm\nfind . -name \"*.tmp\" | xargs rm\n```\n\n### Основные флаги\n\n```bash\n# -I {} — подстановка (плейсхолдер для каждого элемента)\nfind . -name \"*.java\" | xargs -I {} cp {} backup\u002F\n\n# -n N — передавать по N аргументов за раз\necho \"a b c d e\" | xargs -n 2 echo\n# a b\n# c d\n# e\n\n# -d — указать разделитель\necho \"a:b:c\" | xargs -d ':' echo\n# a b c\n\n# -0 — разделитель NUL (для файлов с пробелами\u002Fспецсимволами в именах)\nfind . -name \"*.log\" -print0 | xargs -0 rm\n\n# -p — запрашивать подтверждение перед выполнением\nfind . -name \"*.tmp\" | xargs -p rm\n\n# -t — показывать выполняемую команду перед выполнением\necho \"file1 file2\" | xargs -t rm\n```\n\n### Параллельное выполнение\n\n```bash\n# -P N — запускать N процессов параллельно\nfind . -name \"*.png\" | xargs -P 4 -I {} convert {} -resize 50% small_{}\n```\n\n### Практические примеры\n\n```bash\n# Удалить все .class файлы\nfind . -name \"*.class\" -print0 | xargs -0 rm -f\n\n# Найти строку во всех Java-файлах\nfind src -name \"*.java\" | xargs grep -l \"deprecated\"\n\n# Массовое создание бэкапов\nls *.conf | xargs -I {} cp {} {}.bak\n\n# Убить все Java-процессы\npgrep java | xargs kill\n\n# Сжать каждый лог-файл отдельно\nfind \u002Fvar\u002Flog -name \"*.log\" -mtime +7 | xargs -I {} gzip {}\n\n# Подсчитать строки кода в проекте\nfind src -name \"*.java\" | xargs wc -l\n\n# Массовая замена текста в файлах\nfind . -name \"*.yml\" | xargs sed -i 's\u002Flocalhost\u002F0.0.0.0\u002Fg'\n```\n\n### xargs vs find -exec\n\n| Характеристика | `find ... -exec cmd {} \\;` | `find ... \\| xargs cmd` |\n|---|---|---|\n| Запуск процессов | Один процесс на файл | Один процесс на пачку файлов |\n| Производительность | Медленнее | Быстрее |\n| Пробелы в именах | Безопасно | Нужен `-print0 \\| xargs -0` |\n| Пакетная обработка | `-exec cmd {} +` | По умолчанию |\n\n> **Совет:** для безопасной работы с именами файлов, содержащими пробелы и спецсимволы, всегда используйте `find ... -print0 | xargs -0`.\n\n> **На собеседовании:** объясните проблему: пайп передаёт в stdin, а многие команды ожидают аргументы — `xargs` решает это. Знание флагов `-I {}`, `-0`, `-P` показывает практический опыт. Частый вопрос: «как безопасно удалить файлы с пробелами в именах?» — `find ... -print0 | xargs -0 rm`.\n\n---","","middle",[15,16,17,18],"scripting","linux","автоматизация","bash",[],null,{"title":22,"description":23,"ogTitle":22,"ogDescription":24,"keywords":25,"schemaAnswer":33,"featuredSnippetReady":34},"xargs: преобразование stdin в аргументы команд -- Gymterview","Как использовать xargs? Преобразование stdin в аргументы, флаги -I, -n, -0, -P для параллельного выполнения. Практические примеры: удаление файлов, grep, подсчёт строк кода.","Подробный разбор xargs: преобразование stdin в аргументы, подстановка, параллельное выполнение и практические примеры для Java-разработчиков.",[26,27,28,29,30,31,32],"xargs","xargs примеры","xargs -I","xargs -0","параллельное выполнение xargs","find xargs","stdin аргументы","xargs читает данные из stdin и передаёт их как аргументы другой команде, являясь мостом между пайпами и командами, не читающими stdin (rm, chmod, mv). Основные флаги: -I {} -- подстановка плейсхолдера, -n N -- передавать по N аргументов, -0 -- разделитель NUL для файлов с пробелами (вместе с find -print0), -d -- указать разделитель, -P N -- параллельное выполнение в N процессов, -p -- подтверждение. Примеры: find . -name '*.class' | xargs rm -f, find src -name '*.java' | xargs wc -l. Для надёжности с именами файлов используйте -print0 | xargs -0.",true]