元IT土方の遺言

元客先常駐Sierの備忘録みたいなもの

【 xargs 】コマンドと【 | 】パイプの違い

【 xargs 】コマンドとは

標準出力結果を実行したいコマンドの前に記述することで

結果を引数として受け取りコマンドを実行することができる

例)

コマンド1 | xargs コマンド2

 

【 | 】パイプとは

標準出力結果を次のコマンドに渡す

例)

コマンド1 | コマンド2 

 

xargsの必要性が分からなかったので両者の違いを検証

検証環境

ディレクトリ:

/home/ubuntu/project/sample

配下ファイル

./search.txt

ファイル内容

hoge

hogehoge

 

実行コマンド

1). find . -name 'search.txt' | xargs grep hoge

2). find . -name 'search.txt' | grep hoge

 

結果

f:id:moffu_mofu:20180729223136p:plain

 

2の結果が出てこないのでなにを渡しているのかechoで確認

f:id:moffu_mofu:20180729223859p:plain

catで確認

f:id:moffu_mofu:20180729224116p:plain

1の【xargs】を使った場合は引数として変換して渡しているため

echoでfindの結果のファイル名、catでファイルの内容が出力されているようです。

 

2の【 | 】パイプオンリーのときは引数変換せずに結果を塊として渡しているため

echoで無、catで塊の内容(./search.txt)が出力されているようです。

 

今更感はありますがlinuxコマンドは使わないと忘れますね;;