Manpages

名 前

xargs − 標 準 入 力 を 読 み 込 ん で コ マ ン ド ラ イ ン を 作 成 し 、 そ れ を 実 行 す る

書 式

xargs [−0prtx] [−E eof−str] [−e[eof−str]] [−−eof[=eof−str]] [−−null] [−d delimiter] [−−delimiter delimiter] [−I replace−str] [−i[replace−str]] [−−replace[=replace−str]] [−l[max−lines]] [−L max−lines] [−−max−lines[=max−lines]] [−n max−args] [−−max−args=max−args] [−s max−chars] [−−max−chars=max−chars] [−P max−procs] [−−max−procs=max−procs] [−−process−slot−var=name] [−−interactive] [−−verbose] [−−exit] [−−no−run−if−empty] [−−arg−file=file] [−−show−limits] [−−version] [−−help] [command [initial−arguments]]

[訳 注 ]: 見 や す く す る た め に 、 整 理 し て 単 純 化 す る と :

xargs [options] [command [initial-arguments]]

説 明

こ の マ ニ ュ ア ル ペ ー ジ は 、 GNU 版 xargs の 使 用 法 を 説 明 し て い る 。 xargs は 、 標 準 入 力 か ら 空 白 や 改 行 で 区 切 ら れ た 一 連 の 項 目 を 読 み 込 み (空 白 は ダ ブ ル ク ォ ー ト 、 シ ン グ ル ク ォ ー ト 、 バ ッ ク ス ラ ッ シ ュ に よ っ て 保 護 で き る )、 そ れ を 引 き 数 に し て 、 指 定 し た command を 1 回 以 上 実 行 す る (デ フ ォ ル ト の コ マ ン ド は /bin/echo で あ る )。 こ の と き 、 ユ ー ザ が command に 対 し て 指 定 し た 引 き 数 (上 記 書 式 の initial−arguments) が あ れ ば 、 標 準 入 力 か ら 読 み 込 ん だ 一 連 の 項 目 は 、 そ の 後 ろ に 追 加 さ れ る 。 標 準 入 力 に お け る 空 行 は 無 視 す る 。

command の コ マ ン ド ラ イ ン は 、 (−n−L オ プ シ ョ ン が 使 用 さ れ て い な い 場 合 は ) シ ス テ ム が 定 め て い る コ マ ン ド ラ イ ン の 長 さ の 限 界 に 達 す る ま で 、 長 い も の が 作 成 さ れ る 。 そ し て 、 指 定 さ れ た command が 、 入 力 項 目 の リ ス ト を 一 つ 残 ら ず 処 理 す る の に 必 要 な 回 数 だ け 、 呼 び 出 さ れ る 。 だ か ら 、 お お む ね 、 command が 呼 び 出 さ れ る 回 数 は 、 入 力 項 目 の 数 よ り も 、 ず っ と 少 な く て す む わ け だ 。 こ の こ と は 、 た い て い の 場 合 、 パ フ ォ ー マ ン ス を 著 し く 向 上 さ せ る こ と に な る 。 な お 、 コ マ ン ド の 中 に は 、 都 合 が よ い こ と に 、 並 列 的 に 実 行 で き る も の も あ る 。 −P オ プ シ ョ ン を 参 照 し て い た だ き た い 。

Unix で は フ ァ イ ル 名 に 空 白 や 改 行 を 含 む こ と が 可 能 な の で 、 こ う し た デ フ ォ ル ト の 動 作 は 、 し ば し ば 問 題 を 引 き 起 こ す 。 空 白 や 改 行 を 含 む フ ァ イ ル 名 は 、 xargs に よ っ て 適 切 に 処 理 さ れ な い の だ 。 そ う し た 状 況 で は 、 −0 オ プ シ ョ ン を 使 用 し た 方 が よ い 。 そ う す れ ば 、 そ の 手 の 問 題 を 回 避 す る こ と が で き る 。 な お 、 −0 オ プ シ ョ ン を 使 う 場 合 は 、 xargs の 入 力 を 生 成 す る プ ロ グ ラ ム の 方 で も 、 区 切 り の 指 標 に 必 ず ヌ ル 文 字 を 使 う よ う に す る 必 要 が あ る 。 た と え ば 、 そ の プ ロ グ ラ ム が GNU find な ら ば 、 −print0 オ プ シ ョ ン で そ れ が 可 能 だ 。 指 定 し た コ マ ン ド の 実 行 が 終 了 ス テ ー タ ス 255 で 終 了 す る こ と が あ れ ば 、 xargs は 即 座 に 停 止 し て 、 そ れ 以 上 入 力 を 読 み 込 ま な い 。 ま た 、 こ の と き 、 エ ラ ー メ ッ セ ー ジ を 標 準 エ ラ ー に 表 示 す る 。

オ プ シ ョ ン

−0, −−null 入 力 さ れ る 一 連 の 項 目 が 、 ホ ワ イ ト ス ペ ー ス (空 白 や 改 行 ) で は な く 、 ヌ ル 文 字 に よ っ て 区 切 ら れ る こ と に な る 。 ま た 、 引 用 符 や バ ッ ク ス ラ ッ シ ュ が 特 別 な 意 味 を 持 た な く な る (す な わ ち 、 あ ら ゆ る 文 字 が 文 字 通 り に 解 釈 さ れ る )。 後 述 の フ ァ イ ル 終 端 文 字 列 も 無 効 に な り 、 他 の 引 き 数 と 同 じ よ う に 扱 わ れ る 。 こ の オ プ シ ョ ン は 、 入 力 さ れ る 項 目 に ホ ワ イ ト ス ペ ー ス 、 引 用 符 、 バ ッ ク ス ラ ッ シ ュ な ど が 含 ま れ る 可 能 性 が あ る 場 合 に 、 役 に 立 つ 。 GNU find−print0 オ プ シ ョ ン が 生 成 す る 出 力 は 、 こ の モ ー ド に 対 応 し た 入 力 に な る 。
−a
file, −−arg−file=file 一 連 の 項 目 を 標 準 入 力 か ら で は な く 、 file か ら 読 み 込 む 。 デ フ ォ ル ト で は 、 指 定 し た コ マ ン ド が 実 行 さ れ る 際 に 、 標 準 入 力 が /dev/null に 付 け 換 え ら れ る が 、 こ の オ プ シ ョ ン を 使 用 し た 場 合 は 、 標 準 入 力 の 付 け 換 え が 起 こ ら な い (訳 注 : 別 の 言 い 方 を す る と 、 指 定 し た コ マ ン ド の 実 行 中 、 デ フ ォ ル ト で は 標 準 入 力 が 使 え な く な る の で 、 た と え ば 、 "rm −i" の 出 す プ ロ ン プ ト に 応 答 で き な く な る が 、 こ の オ プ シ ョ ン を 使 用 し た 場 合 は 、 標 準 入 力 が 使 え る の で 、 応 答 で き る と い う こ と )。
−−delimiter=
delim, −d delim 入 力 さ れ る 一 連 の 項 目 が 、 指 定 さ れ た 文 字 に よ っ て 区 切 ら れ る こ と に な る 。 指 定 さ れ る 区 切 り 文 字 は 、 単 一 の 文 字 で も よ く 、 \n の よ う な C 言 語 式 の エ ス ケ ー プ 文 字 で も 、 8 進 数 や 16 進 数 の エ ス ケ ー プ コ ー ド で も よ い 。 8 進 数 や 16 進 数 の エ ス ケ ー プ コ ー ド は 、 printf コ マ ン ド の 場 合 と 同 様 に 解 釈 さ れ る 。 マ ル チ バ イ ト 文 字 に は 対 応 し て い な い 。 入 力 を 処 理 す る 際 、 引 用 符 や バ ッ ク ス ラ ッ シ ュ は 特 別 扱 い さ れ な い 。 す な わ ち 、 入 力 中 の あ ら ゆ る 文 字 が 、 文 字 通 り に 解 釈 さ れ る 。 −d オ プ シ ョ ン を 指 定 す る と 、 フ ァ イ ル 終 端 文 字 列 は 無 効 に な り 、 他 の 引 き 数 と 同 じ よ う に 扱 わ れ る 。 入 力 が 、 項 目 を 改 行 で 区 切 っ て い る だ け の よ う な 単 純 な 構 成 の 場 合 に は 、 こ の オ プ シ ョ ン を 使 っ て も よ い が 、 ほ と ん ど た い て い の 場 合 、 な る べ く な ら 、 xargs−−null を 使 う よ う に 、 出 力 側 の プ ロ グ ラ ム を 組 み 立 て る 方 が 望 ま し い 。
−E
eof−str

eof−str を フ ァ イ ル 終 端 文 字 列 と し て 設 定 す る 。 フ ァ イ ル 終 端 文 字 列 が 入 力 中 の 1 行 と し て 現 れ る と 、 そ れ 以 後 の 入 力 は 無 視 さ れ る 。 −E−e も 指 定 し な い 場 合 、 フ ァ イ ル 終 端 文 字 列 は 使 用 さ れ な い 。 (訳 注 : 原 文 に は 「 入 力 中 の 1 行 と し て 現 れ る と (occurs as a line of input)」 と あ る が 、 実 際 の 動 作 は 「 入 力 中 に 独 立 し た 1 項 目 と し て 現 れ る と 、 そ れ 以 後 の 入 力 は 無 視 さ れ る 」 の よ う だ 。 )

−e[eof−str], −−eof[=eof−str] こ の オ プ シ ョ ン は −E オ プ シ ョ ン の 同 義 語 で あ る 。 −E の 方 を 使 っ て い た だ き た い 。 理 由 は 、 そ ち ら が POSIX に 準 拠 し て い る の に 対 し て 、 こ ち ら は 準 拠 し て い な い か ら だ 。 eof−str の 部 分 が 省 略 さ れ る と 、 フ ァ イ ル 終 端 文 字 列 が 存 在 し な い こ と に な る 。 −E−e も 指 定 し な い 場 合 、 フ ァ イ ル 終 端 文 字 列 は 使 用 さ れ な い 。
−I
replace−str

initial−arguments 中 で 文 字 列 replace−str が 現 れ る す べ て の 箇 所 を 、 標 準 入 力 か ら 読 み 込 ん だ 名 前 で 置 き 換 え る 。 な お 、 標 準 入 力 中 に ク ォ ー ト さ れ て い な い 空 白 が あ っ て も 、 そ れ は 入 力 項 目 の 区 切 り に は な ら な い 。 区 切 り の 指 標 は 改 行 文 字 だ け に な る の だ 。 −x−L 1 が 自 動 的 に 設 定 さ れ る 。

[訳 注 ]: も う 少 し 詳 し く 説 明 し た 方 が よ い だ ろ う 。 普 通 、 ユ ー ザ が

xargs で 実 行 す る コ マ ン ド に 引 き 数 (そ れ が initial-arguments で あ る 。 上 記 書 式 を 参 照 ) を 指 定 し た 場 合 、 標 準 入 力 か ら 読 み 込 ま れ た 項 目 群 は 、 initial-arguments の 後 ろ に ど ん ど ん 追 加 さ れ て 行 く 。 そ れ に 対 し て 、 −I replace-str オ プ シ ョ ン を 使 用 し た 場 合 は 、 次 の 二 点 が 異 な っ て い る 。 一 つ は 、 標 準 入 力 は 改 行 で 分 割 さ れ 、 そ の 1 行 1 行 が 、 コ マ ン ド 1 回 の 実 行 に つ き 1 個 づ つ 使 用 さ れ る こ と (そ れ が −L 1 と い う こ と だ )。 も う 一 つ は 、 そ の 1 行 が 1 項 目 と し て 扱 わ れ (−L 1 を 単 独 で 使 っ た 場 合 と は 、 そ こ が 違 う )、 そ の 1 項 目 が 、 initial-arguments の 後 ろ に 追 加 さ れ る の で は な く 、 initial-arguments 中 の 文 字 列 replace-str が 現 れ る す べ て の 位 置 に 埋 め 込 ま れ る こ と だ 。 以 下 の 例 で は 、 "{}" が replace-str で あ り 、 "{} is {}" の 部 分 が コ マ ン ド echo に 対 す る initial-arguments で あ る 。 −I の 直 後 の 空 白 は 、 あ っ て も な く て も よ く 、 replace-str は "{}" 以 外 の 文 字 列 で も よ い 。 な お "{}" は ク ォ ー ト し た 方 が よ い か も し れ な い 。

$ echo -e "AAA BBB\nCCC\nDDD" |xargs -I{} echo {} is {}
AAA BBB is AAA BBB
CCC is CCC
DDD is DDD 入 力 項 目 を 区 切 っ て い る デ リ ミ タ は 改 行 だ け で あ り 、 空 白 は 項 目 の 区 切 り と し て 機 能 し て い な い の が お 分 か り に な る だ ろ う 。 別 の 言 い 方 を す る と 、 −I で は 、 各 行 は 1 行 全 体 が 事 実 上 ク ォ ー ト さ れ て コ マ ン ド に 渡 さ れ る (注 意 : −L 1 に そ ん な 作 用 は な い )。 従 っ て 、 −I オ プ シ ョ ン を 使 え ば 、 空 白 を 含 む フ ァ イ ル 名 を 処 理 で き る と い う こ と に な る 。 た と え ば 、 カ レ ン ト デ ィ レ ク ト リ に "nospace" と "have space" と い う フ ァ イ ル が あ る と し よ う 。

$ ls |xargs file
have: cannot open ’have’ (No such file or directory)
space: cannot open ’space’ (No such file or directory)
nospace: ASCII text
$ ls |xargs -L1 file
have: cannot open ’have’ (No such file or directory)
space: cannot open ’space’ (No such file or directory)
nospace: ASCII text
$ ls |xargs -I{} file {}
have space: UTF-8 Unicode text
nospace: ASCII text

−i[replace−str], −−replace[=replace−str] こ の オ プ シ ョ ン は 、 replace−str が 指 定 さ れ て い れ ば 、 −Ireplace−str の 同 義 語 で あ る 。 引 き 数 replace−str が 省 略 さ れ て い れ ば 、 −I{} と 同 じ こ と に な る 。 こ の オ プ シ ョ ン は 非 推 奨 で あ る 。 −I を 使 っ た 方 が よ い 。
−L
max−lines

1 コ マ ン ド ラ イ ン に つ き 最 大 max−lines 行 の (空 行 で は な い ) 入 力 行 を 使 用 す る 。 入 力 行 の 行 末 に 空 白 文 字 が 付 い て い る と 、 そ の 行 は 次 の 入 力 行 に 論 理 的 に 続 い て い る こ と に な る 。 自 動 的 に −x が 指 定 さ れ る 。

[訳 注 ]:

−n オ プ シ ョ ン と の 違 い に 注 意 。 「 行 末 に 空 白 文 字 」 云 々 に つ い て は 、 以 下 の 3 番 目 の 例 を 他 の も の と 比 較 し て い た だ き た い 。 コ マ ン ド の 実 行 回 数 が わ か る よ う に 、 echoinitial-argument を 付 け て み た (代 わ り に −t オ プ シ ョ ン を 使 っ て も よ か っ た か も し れ な い )。 な お 、 デ リ ミ タ を ヌ ル 文 字 に し た と き や 、 −−delimiter で 指 定 し た と き の 動 作 が ど う な る か は 、 ご 自 分 で 試 し て み て い た だ き た い 。

$ echo AAA BBB CCC |xargs -L1 echo "line: "
line: AAA BBB CCC
$ echo -e "AAA\nBBB\nCCC" |xargs -L1 echo "line: "
line: AAA
line: BBB
line: CCC
$ echo -e "AAA \nBBB\nCCC" |xargs -L1 echo "line: "
line: AAA BBB
line: CCC

−l[max−lines], −−max−lines[=max−lines]

−L オ プ シ ョ ン の 同 義 語 で あ る 。 −L と は 違 っ て 、 max−lines と い う 引 き 数 を 指 定 す る か ど う か は 任 意 で あ る 。 引 き 数 max−lines を 指 定 し な か っ た 場 合 は 、 デ フ ォ ル ト の 1 が 使 用 さ れ る 。 POSIX 規 格 で は −L の 方 を 使 う こ と に な っ て い る の で 、 −l オ プ シ ョ ン の 使 用 は お 勧 め で き な い 。

−n max−args, −−max−args=max−args

1 コ マ ン ド ラ イ ン に つ き 最 大 max−args 個 の 引 き 数 を 使 用 す る 。 作 成 さ れ た コ マ ン ド ラ イ ン が 、 コ マ ン ド ラ イ ン 長 の 上 限 を 超 過 す る 場 合 は (−s オ プ シ ョ ン 参 照 )、 max−args よ り 少 な い 引 き 数 が 使 用 さ れ る こ と に な る 。 た だ し 、 −x オ プ シ ョ ン が 指 定 さ れ て い る と き は 別 で 、 そ の 場 合 は xargs が 終 了 す る 。

−P max−procs, −−max−procs=max−procs 同 時 に 実 行 す る プ ロ セ ス の 最 大 数 を max−procs に す る 。 デ フ ォ ル ト は 1 で あ る 。 max−procs が 0 だ と 、 xargs は で き る だ け 多 く の プ ロ セ ス を 同 時 に 実 行 し よ う と す る 。 −P オ プ シ ョ ン に は 、 −n−L オ プ シ ョ ン を 併 せ て 使 用 す る こ と 。 さ も な い と 、 お そ ら く exec 関 数 が た っ た 一 回 し か 実 行 さ れ な い こ と に な る だ ろ う 。 xargs の 実 行 中 に 、 そ の プ ロ セ ス に SIGUSR1 シ グ ナ ル を 送 れ ば 、 同 時 に 実 行 す る コ マ ン ド の 数 を 増 や す こ と が で き る 。 ま た 、 SIGUSR2 シ グ ナ ル を 送 れ ば 、 そ の 数 を 減 ら す こ と が で き る 。 た だ し 、 実 装 が 決 め て い る 上 限 を 越 え て 増 や す こ と は で き な い し (上 限 は −−show−limits を 使 え ば 、 知 る こ と が で き る )、 1 よ り 少 な く す る こ と も で き な い 。 xargs は 、 実 行 し て い る コ マ ン ド を 終 了 さ せ る わ け で は な い 。 実 行 数 を 減 ら す よ う に 命 じ ら れ た と き は 、 単 に 現 在 動 い て い る コ マ ン ド が 二 つ 以 上 終 了 す る の を 待 ち 、 そ れ か ら 別 の コ マ ン ド を 開 始 す る の で あ る 。 注 意 し て い た だ き た い が 、 共 有 リ ソ ー ス に 対 す る 並 列 ア ク セ ス を き ち ん と 管 理 す る の は 、 呼 び 出 さ れ る プ ロ セ ス 側 の 問 題 だ 。 た と え ば 、 複 数 の プ ロ セ ス が 標 準 出 力 に 書 き 出 そ う と し た 場 合 、 出 力 は 不 定 の 順 番 で 生 成 さ れ る こ と に な る (だ か ら , 混 じ り 合 っ て し ま う 可 能 性 が 高 い )。 そ う な ら な い た め に は 、 プ ロ セ ス 同 士 が 何 ら か の 形 で 協 力 し 合 う 必 要 が あ る 。 ロ ッ キ ン グ ・ ス キ ー ム の よ う な も の を 使 う の は 、 そ う し た 問 題 を 避 け る た め の 一 方 法 で あ る 。 た だ 、 一 般 に 、 ロ ッ キ ン グ ・ ス キ ー ム の 使 用 は 、 適 切 な 出 力 を 保 証 し て は く れ る も の の 、 パ フ ォ ー マ ン ス を 低 下 さ せ る こ と に な る 。 パ フ ォ ー マ ン ス が 落 ち る の が 嫌 な ら ば 、 単 純 に 各 プ ロ セ ス が そ れ ぞ れ 別 の 出 力 フ ァ イ ル を 作 る よ う に (あ る い は 、 別 の リ ソ ー ス を 使 う よ う に ) す れ ば よ い 。
−p, −−interactive
コ マ ン ド ラ イ ン 1 行 ご と に 、 実 行 す る か ど う か を ユ ー ザ に 尋 ね る プ ロ ン プ ト を 出 し 、 端 末 か ら 1 行 読 み 込 む 。 コ マ ン ド ラ イ ン を 実 行 す る の は 、 返 答 が ’y’ ま た は ’Y’ で 始 ま る と き だ け で あ る 。 自 動 的 に −t が 指 定 さ れ る 。
−−process−slot−var
=name 複 数 の 子 プ ロ セ ス を 同 時 実 行 し て い る と き 、 そ の 各 子 プ ロ セ ス で 環 境 変 数 name に ユ ニ ー ク な 値 を セ ッ ト す る 。 値 は 、 子 プ ロ セ ス が 終 了 す る と 、 再 利 用 さ れ る 。 こ の 機 能 は 、 た と え ば 、 初 歩 的 な 負 荷 分 散 ス キ ー ム で 利 用 で き る 。
−r, −−no−run−if−empty
標 準 入 力 に 空 白 し か 含 ま れ て い な い 場 合 は 、 指 定 し た コ マ ン ド を 実 行 し な い 。 通 常 で は 、 入 力 が 全 く な い 場 合 で も 、 コ マ ン ド が 一 回 は 実 行 さ れ る の で あ る 。 こ の オ プ シ ョ ン は GNU の 拡 張 で あ る 。
−s
max−chars, −−max−chars=max−chars

1 コ マ ン ド ラ イ ン に つ き 最 大 max−chars の 文 字 を 使 用 す る 。 こ の 文 字 数 に は 、 指 定 し た コ マ ン ド と initial−arguments、 そ れ に 各 引 き 数 文 字 列 の 終 端 を 示 す ヌ ル 文 字 も 含 ま れ る 。 指 定 で き る 値 の 上 限 は 、 シ ス テ ム 次 第 で あ り 、 exec 関 数 に 対 す る 引 き 数 の 最 大 長 か ら 、 現 在 の 環 境 の サ イ ズ と 2048 バ イ ト の 余 裕 領 域 を 引 い た も の で あ る 。 も し そ の 値 が 128KiB 以 上 だ っ た と き は 、 デ フ ォ ル ト の 値 に は 128KiB が 使 用 さ れ る 。 128KiB 未 満 の と き は 、 算 出 さ れ た 上 限 が デ フ ォ ル ト の 値 に な る 。 1KiB は 1024 バ イ ト で あ る 。 制 限 が よ り 厳 し い 場 合 で も 、 xarg は 自 動 的 に そ れ に 対 応 す る 。

−−show−limits コ マ ン ド ラ イ ン 長 の 上 限 を 表 示 す る 。 コ マ ン ド ラ イ ン 長 の 上 限 は 、 オ ペ レ ー テ ィ ン グ シ ス テ ム 、 xargs が 設 定 し た バ ッ フ ァ サ イ ズ 、 そ れ に −s オ プ シ ョ ン に よ っ て 決 ま る 。 xargs に コ マ ン ド ラ イ ン 長 の 上 限 の 表 示 以 外 を さ せ た く な か っ た ら 、 入 力 を /dev/null か ら パ イ プ で xargs に 渡 し て や れ ば よ い (さ ら に −−no−run−if−empty を 指 定 し た 方 が よ い か も し れ な い )。
−t, −−verbose
実 行 す る 前 に 、 コ マ ン ド ラ イ ン を 標 準 エ ラ ー 出 力 に 表 示 す る 。
−x, −−exit
作 成 さ れ た コ マ ン ド ラ イ ン が コ マ ン ド ラ イ ン 長 の 上 限 を 超 過 し て い た ら (−s オ プ シ ョ ン を 参 照 )、 終 了 す る 。

−−help

xargs の オ プ シ ョ ン に つ い て 簡 単 に 説 明 し 終 了 す る 。

−−version

xargs の バ ー ジ ョ ン 番 号 を 表 示 し て 、 終 了 す る 。

用 例

find /tmp −name core −type f −print | xargs /bin/rm −f

/tmp デ ィ レ ク ト リ 以 下 に core と い う 名 前 の フ ァ イ ル を 捜 し て 、 そ れ を 消 去 す る 。 改 行 や 空 白 を 含 む フ ァ イ ル 名 が あ る と 、 正 し く 動 作 し な い の で 、 注 意 す る こ と 。

find /tmp −name core −type f −print0 | xargs −0 /bin/rm −f

/tmp デ ィ レ ク ト リ 以 下 に core と い う 名 前 の フ ァ イ ル を 捜 し て 、 そ れ を 消 去 す る 。 フ ァ イ ル 名 の 処 理 に 当 た っ て は 、 フ ァ イ ル 名 や デ ィ レ ク ト リ 名 に 空 白 や 改 行 が 含 ま れ て い て も 、 適 切 に 扱 わ れ る よ う に し て い る 。

find /tmp −depth −name core −type f −delete

/tmp デ ィ レ ク ト リ 以 下 に core と い う 名 前 の フ ァ イ ル を 捜 し て 、 そ れ を 消 去 す る 。 上 の 例 よ り も こ ち ら の 方 が 効 率 的 で あ る (な ぜ な ら 、 rm を 実 行 す る た め に fork(2)exec(2) を 使 わ な い で す む し 、 そ も そ も 、 xargs の プ ロ セ ス を 必 要 と し な い か ら )。

cut −d: −f1 < /etc/passwd | sort | xargs echo シ ス テ ム の 全 ユ ー ザ を 列 挙 し た 簡 潔 な リ ス ト を 生 成 す る (訳 注 : 要 す る に 、 改 行 で は な く 、 空 白 で 区 切 ら れ た ユ ー ザ 名 の リ ス ト を 作 る と い う こ と )。

xargs sh −c ’emacs "$@" < /dev/tty’ emacs

xargs の 標 準 入 力 か ら フ ァ イ ル の リ ス ト を 受 け 取 り 、 Emacs を 必 要 な だ け 次 々 と 実 行 し て 、 フ ァ イ ル を 編 集 す る 。 こ の 例 は BSD の −o オ プ シ ョ ン と 同 じ こ と を 実 現 す る が 、 こ ち ら の 方 が 柔 軟 性 が あ り 、 多 く の シ ス テ ム で 利 用 で き る 。

終 了 ス テ ー タ ス

xargs の 終 了 ス テ ー タ ス は 以 下 の と お り で あ る 。
0 成 功 し た 。
123 指 定 し た コ マ ン ド の 実 行 が 1−125 の ス テ ー タ ス で 終 了 し た 。
124 指 定 し た コ マ ン ド が 255 の ス テ ー タ ス で 終 了 し た 。
125 指 定 し た コ マ ン ド が シ グ ナ ル に よ っ て kill さ れ た 。
126 指 定 し た コ マ ン ド が 実 行 で き な い 。
127 指 定 し た コ マ ン ド が 見 つ か ら な い 。
1 上 記 以 外 の エ ラ ー が 起 き た 。

128 以 上 の 終 了 ス テ ー タ ス は 、 致 命 的 な シ グ ナ ル の せ い で プ ロ グ ラ ム が 止 ま っ た こ と を 示 す た め に 、 シ ェ ル が 使 用 し て い る 。

規 格 へ の 準 拠

GNU xargs version 4.2.9 以 来 、 フ ァ イ ル の 論 理 的 な 終 端 を 示 す 指 標 (a logical end−of−file marker) を 持 た な い の が 、 xargs の デ フ ォ ル ト に な っ て い る 。 こ の こ と は POSIX (IEEE Std 1003.1, 2004 Edition) で 認 め ら れ て い る 。

−l や −i オ プ シ ョ ン は 1997 年 版 の POSIX 規 格 に は 存 在 す る が 、 2004 年 版 の POSIX 規 格 に は 存 在 し な い 。 従 っ て 、 そ れ ぞ れ −L や −I の 方 を 使 う べ き で あ る 。

POSIX 規 格 は 、 実 装 に 当 た っ て 、 exec 関 数 に 対 す る 引 き 数 の サ イ ズ に 上 限 を 設 け る こ と を 認 め て い る 。 そ し て 、 そ の 上 限 は 、 環 境 の サ イ ズ も 含 め て 、 少 な く と も 4096 バ イ ト あ れ ば よ い こ と に な っ て い る 。 移 植 性 の あ る ス ク リ プ ト を 書 こ う と 思 っ た ら 、 こ れ よ り 大 き い サ イ ズ を 当 て に し て は い け な い 。 も っ と も 、 実 際 の 上 限 が そ ん な に 小 さ い 実 装 に 、 筆 者 は 出 会 っ た こ と が な い け れ ど 。 −−show−limits オ プ シ ョ ン を 使 え ば 、 使 用 中 の シ ス テ ム で 有 効 な 実 際 の 上 限 を 知 る こ と が で き る 。

関 連 項 目

find(1), locate(1), locatedb(5), updatedb(1), fork(2), execvp(3), kill(1), signal(7),

xargs に は 、 Texinfo マ ニ ュ ア ル の 形 で 保 守 さ れ て い る 充 実 し た 文 書 が あ る 。 infoxargs プ ロ グ ラ ム が 、 御 使 用 の サ イ ト で き ち ん と イ ン ス ト ー ル さ れ て い る な ら ば 、 info xargs と コ マ ン ド を 打 ち 込 む こ と で 、 詳 細 な マ ニ ュ ア ル が 読 め る は ず だ 。

バ グ

−L オ プ シ ョ ン と −I オ プ シ ョ ン を 組 み 合 わ せ て も 、 う ま く 行 か な い 。 組 み 合 わ せ て 使 え た 方 が よ い の か も し れ な い が 。

[訳 注 ]:

−I オ プ シ ョ ン の 説 明 に あ る よ う に 、 −I replace−str を 指 定 す る と 、 −L 1 が 自 動 的 に 設 定 さ れ る 。 だ か ら 、 こ こ で 言 っ て い る の は 、 現 状 で は −L 2 や −L 3 を −I と 一 緒 に 使 っ て も 、 期 待 す る 結 果 は 得 ら れ な い と い う こ と だ ろ う 。

xargs を 安 全 に 使 う こ と は 不 可 能 で あ る 。 な ぜ な ら 、 入 力 さ れ る フ ァ イ ル 名 の リ ス ト を 生 成 す る 時 間 と xargs が 実 行 す る コ マ ン ド が そ れ を 使 用 す る 時 間 と の 間 に は 、 必 ず 時 間 差 が あ る か ら だ 。 も し 、 他 の ユ ー ザ が シ ス テ ム に ア ク セ ス す る こ と が で き れ ば 、 そ の ユ ー ザ は こ の 時 間 の 隙 間 に フ ァ イ ル シ ス テ ム を 操 作 し て 、 xargs が 実 行 す る コ マ ン ド の 動 作 を 、 こ ち ら が 意 図 し て い な い フ ァ イ ル に 無 理 矢 理 向 け る こ と が で き る 。 こ の 問 題 や 、 こ れ に 関 連 す る 問 題 に つ い て は 、 findutils に 含 ま れ る Texinfo 文 書 の 「 Security Considerations」 と い う 章 で も っ と 細 か く 論 じ て い る の で 、 そ ち ら を 参 照 し て い た だ き た い 。 な お 、 find−execdir オ プ シ ョ ン は 、 よ り 安 全 な 方 法 と し て xargs の 代 わ り に 使 用 で き る こ と が 多 い 。

−I オ プ シ ョ ン を 使 う と 、 標 準 入 力 か ら 読 み 込 ま れ た 各 行 が 内 部 的 に バ ッ フ ァ さ れ る 。 そ れ は 、 −I オ プ シ ョ ン を 付 け て 使 っ た と き 、 xargs が 受 け 入 れ る 入 力 行 1 行 の 長 さ に 上 限 が あ る と い う こ と だ 。 こ の 制 限 を 回 避 す る に は 、 −s オ プ シ ョ ン を 使 っ て 、 xargs が 使 用 す る バ ッ フ ァ 空 間 の サ イ ズ を 増 や し て や れ ば よ い 。 さ ら に 、 xargs を も う 一 つ 実 行 す れ ば 、 長 す ぎ る 行 の 出 現 を 確 実 に 避 け る こ と が で き る 。 た と え ば 、

somecommand | xargs −s 50000 echo | xargs −I ’{}’ −s 100000 rm ’{}’ こ の 例 で は 、 xargs の 最 初 の 実 行 に は 、 入 力 行 の 長 さ の 上 限 が な い 。 −I オ プ シ ョ ン を 使 っ て い な い か ら で あ る 。 xargs の 二 番 目 の 実 行 に は 、 そ う し た 上 限 が あ る が 、 処 理 で き る 以 上 の 長 さ の 行 に 絶 対 に 出 会 わ な い よ う に な っ て い る 。 こ れ が 理 想 的 な 解 決 法 だ と い う の で は な い 。 む し ろ 、 −I オ プ シ ョ ン に よ っ て 入 力 行 の 長 さ に 上 限 が で き な い 方 が よ い の で あ り 、 だ か ら こ そ 、 こ の 問 題 を 「 バ グ 」 セ ク シ ョ ン で 論 じ て い る の で あ る 。 な お 、 こ の 問 題 は find(1) の 出 力 で は 起 き な い 。 find は 1 行 に 1 フ ァ イ ル 名 し か 出 力 し な い か ら だ 。 バ グ 報 告 の 最 善 の 方 法 は 、 http://savannah.gnu.org/bugs/?group=findutils に あ る 書 式 を 使 用 す る こ と で あ る 。 そ う す れ ば 、 問 題 解 決 の 進 行 状 態 を 追 う こ と が で き る か ら だ 。 xargs(1) や findutils パ ッ ケ ー ジ 全 般 に つ い て の そ の 他 の ご 意 見 は 、 bug−findutils メ ー リ ン グ リ ス ト に お 出 し に な れ ば よ い 。 メ ー リ ン グ リ ス ト に 参 加 す る に は 、 bug−findutils−request [AT] gnu.org 宛 に E メ ー ル を 送 っ て い た だ き た い 。

翻 訳 に つ い て

こ の 翻 訳 は findutils-4.6.0 所 収 の xargs.1 の 翻 訳 で あ る 。 お 手 元 の findutils は 、 も っ と 新 し い バ ー ジ ョ ン 、 た と え ば 4.7.0-git に な っ て い る か も し れ な い 。 だ が 、 4.7.0 は 開 発 中 の 版 な の で 、 manpage も 変 化 し 続 け て お り 、 現 時 点 で 最 新 の 4.7.0 の マ ニ ュ ア ル を 翻 訳 し て も 、 お 手 元 の 英 語 マ ニ ュ ア ル と は 内 容 が 微 妙 に 違 う か も し れ な い の だ 。 バ ー ジ ョ ン が 同 じ 4.7.0 な の に 、 そ れ で は 紛 ら わ し い 。 そ こ で 、 あ え て 現 在 の 安 定 版 、 4.6.0 の マ ニ ュ ア ル を 底 本 に し た 。 ご 参 考 ま で に 書 い て お く と 、 2017/06/09 以 降 の 4.7.0-git の xargs に は 、 −o (−−open−tty) と い う オ プ シ ョ ン が 追 加 さ れ て い る 。 4.7.0-git の man xargs に よ れ ば 、 「 コ マ ン ド を 実 行 す る 前 に 、 子 プ ロ セ ス で 標 準 入 力 を /dev/tty と し て 再 オ ー プ ン す る 」 と い う も の で あ る 。 そ う し た 最 近 の バ ー ジ ョ ン で は −o オ プ シ ョ ン を 使 え ば 、 た と え ば "find . -name ’*.txt~’ | xargs -o rm -i" と い っ た こ と が 可 能 に な る よ う だ 。 失 敗 し て も 困 ら な い フ ァ イ ル で お 試 し い た だ き た い 。 (2018/03/03)

COMMENTS