私は、私は答えていないよということを知ってxargs
、直接質問を、それは言及する価値があるfind
の-exec
オプションを選択します。
次のファイルシステムがあるとします。
[root@localhost bokeh]# tree --charset assci bands
bands
|-- Dream\ Theater
|-- King's\ X
|-- Megadeth
`-- Rush
0 directories, 4 files
findコマンドは、Dream TheaterとKing's Xのスペースを処理するために作成できます。したがって、grepを使用して各バンドのドラマーを検索します。
[root@localhost]# find bands/ -type f -exec grep Drums {} +
bands/Dream Theater:Drums:Mike Mangini
bands/Rush:Drums: Neil Peart
bands/King's X:Drums:Jerry Gaskill
bands/Megadeth:Drums:Dirk Verbeuren
では-exec
オプション{}
パスを含むファイル名を表します。エスケープしたり、引用符で囲んだりする必要はありません。
-exec
のターミネータ(+
と\;
)の違いは、+
1つのコマンドラインにできる限り多くのファイル名をグループ化することです。一方\;
、ファイル名ごとにコマンドを実行します。
したがって、find bands/ -type f -exec grep Drums {} +
結果は次のようになります。
grep Drums "bands/Dream Theater" "bands/Rush" "bands/King's X" "bands/Megadeth"
とfind bands/ -type f -exec grep Drums {} \;
になります。
grep Drums "bands/Dream Theater"
grep Drums "bands/Rush"
grep Drums "bands/King's X"
grep Drums "bands/Megadeth"
この場合grep
、ファイル名を印刷するかしないかの副作用があります。
[root@localhost bokeh]# find bands/ -type f -exec grep Drums {} \;
Drums:Mike Mangini
Drums: Neil Peart
Drums:Jerry Gaskill
Drums:Dirk Verbeuren
[root@localhost bokeh]# find bands/ -type f -exec grep Drums {} +
bands/Dream Theater:Drums:Mike Mangini
bands/Rush:Drums: Neil Peart
bands/King's X:Drums:Jerry Gaskill
bands/Megadeth:Drums:Dirk Verbeuren
もちろん、grep
のオプション-h
と-H
ファイル名は関係なく、どのように印刷されているかどうかを制御しますgrep
と呼ばれています。
xargs
xargs
コマンドラインでのmanファイルの表示方法も制御できます。
xargs
デフォルトでは、すべての引数が1行にグループ化されます。を-exec \;
使用するのと同じことを行うためxargs -l
。-t
オプションはxargs
、コマンドを実行する前に印刷するように指示することに注意してください。
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -l -t grep Drums
grep Drums ./bands/Dream Theater
Drums:Mike Mangini
grep Drums ./bands/Rush
Drums: Neil Peart
grep Drums ./bands/King's X
Drums:Jerry Gaskill
grep Drums ./bands/Megadeth
Drums:Dirk Verbeuren
それを参照してください -l
オプションがxargsにすべてのファイル名に対してgrepを実行するように指示する。
デフォルトと比較して(つまり、-l
オプションなし):
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -t grep Drums
grep Drums ./bands/Dream Theater ./bands/Rush ./bands/King's X ./bands/Megadeth
./bands/Dream Theater:Drums:Mike Mangini
./bands/Rush:Drums: Neil Peart
./bands/King's X:Drums:Jerry Gaskill
./bands/Megadeth:Drums:Dirk Verbeuren
xargs
コマンドラインで使用できるファイル数をより適切に制御できます。付け-l
オプションにコマンドごとのファイルの最大数を。
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -l2 -t grep Drums
grep Drums ./bands/Dream Theater ./bands/Rush
./bands/Dream Theater:Drums:Mike Mangini
./bands/Rush:Drums: Neil Peart
grep Drums ./bands/King's X ./bands/Megadeth
./bands/King's X:Drums:Jerry Gaskill
./bands/Megadeth:Drums:Dirk Verbeuren
[root@localhost bokeh]#
のgrep
ため、2つのファイル名で実行されたことを確認してください-l2
。
ls |grep mp3 |sed -n "7p"
を使用できますecho "Lemon Tree.mp3"
。