🖥
こわくない xargs ( 初心者のためのシェル入門 )
基本
標準出力を受け取って他のコマンドに渡すことが出来る。
echo Bob Carol | xargs echo
Bob Carol
「置換文字」を指定する
--replace
または -I
オプションを付けると「置換用の文字」を指定できる。
たとえば次の例だと SomeString
は Bob Carol
に置換される。
echo Bob Carol | xargs --replace=SomeString echo Alice SomeString David
Alice Bob Carol David
file
コマンドと組み合わせる
よく使う例。
ファイルの準備
echo "Alice" > ./alice.txt
echo "Bob" > ./bob.txt
echo "Carol" > ./carol.txt
find
するとこんな感じ
普通に find ./ -type f
./carol.txt
./bob.txt
./alice.txt
xargs
と組み合わせて利用
SomeFile
がファイル名に置換されて、全てのファイルを cat
で読むことが出来る。
find ./ -type f | xargs --replace=SomeFile cat SomeFile
Carol
Bob
Alice
ちなみにこの場合、find
の結果は3行あるため、3回の評価がおこなわれる。
xargs
と組み合わせる場合
複数のコマンドを bash / sh コマンドを利用して、その中に置換文字を埋め込んでやれば良い。
cat
して echo
の両方を使う例
find ./ -type f | xargs --replace=SomeFile bash -c "cat SomeFile && echo SomeFile"
Carol
./carol.txt
Bob
./bob.txt
Alice
./alice.txt
「コマンドの中にコマンド」ではうまくいかない
メインコマンドよりも「コマンドの中のコマンド」 $()
の方が先に走ってしまい、必然的に文字置換の処理も起こらない。
find ./ -type f | xargs --replace=SomeFile $(cat SomeFile && echo SomeFile)
cat: SomeFile: No such file or directory
環境
- GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
Gist
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2018-07-26
Discussion