名 前
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 番 目 の 例 を 他 の も の と 比 較 し て い た だ き た い 。 コ マ ン ド の 実 行 回 数 が わ か る よ う に 、 echo に initial-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 マ ニ ュ ア ル の 形 で 保 守 さ れ て い る 充 実 し た 文 書 が あ る 。 info と xargs プ ロ グ ラ ム が 、 御 使 用 の サ イ ト で き ち ん と イ ン ス ト ー ル さ れ て い る な ら ば 、 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)