LoginSignup
23
11

More than 1 year has passed since last update.

こわくない xargs ( 初心者のためのシェル入門 )

Last updated at Posted at 2018-07-26

基本

標準出力を受け取って他のコマンドに渡すことが出来る。

echo Bob Carol | xargs echo

Bob Carol

「置換文字」を指定する

--replace または -I オプションを付けると「置換用の文字」を指定できる。

たとえば次の例だと SomeStringBob 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オープンチャットもご利用ください。

Twitter

23
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
11