Топ питань
Часова шкала
Чат
Перспективи

Xargs

утілита для виконання команд та конструювання набору аргументів з стандартного потоку З Вікіпедії, вільної енциклопедії

Remove ads

xargs (скорочення від «extended arguments»[1]) — це команда в Unix-подібних операційних системах яка використовується для конструювання та виконання команд з аргументами, які були отримані з stdin.

Коротка інформація Тип ...

Команди командного рядка можуть приймати дані декількома способами. Деякі, такі як grep і awk, можуть приймати вхідні дані як аргументи командного рядка, так і з стандартного введення. Однак інші, такі як cp і echo можуть приймати лише як аргументи. Тому, коли є потреба в скрипті перетворити набір даних який виводить одна команда, в набір аргументів для іншої, або послідовність команд, для цього підходить xargs.

Для Microsoft Windows була портована версія GNU xargs, та є складовою колекції UnxUtils для Win32.[2] Основний перепис під назвою wargs є частиною проекту TextTools[3] з відкритим кодом. Також команда була портована в операційну систему IBM i.[4]

Remove ads

Приклади

Узагальнити
Перспектива

Запобігання переповнення загальної довжини команди

Одним з розповсюджених випадків використання команди xargs є видалення списку файлів за допомогою команди rm . Системи POSIX мають обмеження на максимальну загальну довжину команди[5][6].

Це обмеження дуже легко переповнити, наприклад якщо в каталозі /path/ дуже багато файлів, і ми спробуємо виконати команду

$ rm /path/*

Оболонка спробує розкрити /path/* в довжелезний рядок /path/file1 /path/file2 …, — і команда може завершитися помилкою з повідомленням про помилку «Argument list too long» (укр. Список аргументів задовгий)

Це можна переписати за допомогою команди xargs:

$ find /path -type f -print | xargs rm

У наведеному прикладі утиліта find видасть в stdout список файлів як текст, перенаправить цей список в stdin xargs. Потім xargs розбиває цей список на підсписки та викликає rm один раз для кожного підсписку.

Паралелізм

Деякі реалізації xargs також можна використовувати для розпаралелювання операцій, та обмежувати кількість потоків (підпрограм) за допомогою аргументу -P maxprocs. У наведеному нижче прикладі буде породжено 24 процеси /cpu/bound/process, кожен з яких отримує один файл як аргумент, та буде обробляти його, і після того як який-небудь з процесів закінчить свою роботу, то він звільнить місце в наборі з 24 процесів, то xargs запустить новий процес.

$ find /path -name '*.foo' | xargs -P 24 /cpu/bound/process

Схожий функціонал пропонує утиліта GNU Parallel.

Застереження: якщо в іменах файлів, які обробляються, присутні такі символи як пробіл, кома, перенос рядка тощо — то це може призвести до непередбачуваної поведінки. Такі утілити як find, locate, grep і xargs мають опції -0 (або еквівалентно --null) для таких випадків.

Remove ads

Див. також

Примітки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads