xargsはいつ必要ですか?

xargsはいつ必要ですか?

このxargs命令はいつも私を混乱させます。一般的なルールがありますか?

次の 2 つの例を考えてみましょう。

$ \ls | grep Cases | less

「Cases」に一致するファイルを印刷しますが、コマンドを次に変更するには、次のものがtouch必要ですxargs

$ \ls | grep Cases | touch
touch: missing file operand
Try `touch --help' for more information.

$ \ls | grep Cases | xargs touch

ベストアンサー1

違いは、ターゲットプログラムが許可するデータにあります。

パイプのみを使用すると、標準入力ストリーム(STDIN)のデータを生データの束として受け取り、一度に1行ずつ並べ替えることができます。ただし、一部のプログラムは標準入力のコマンドを受け入れず、そのコマンドの引数にそのコマンドが指定されることを期待しています。たとえば、touch次のようにコマンドラインからファイル名を引数として渡しますtouch file1.txt

ファイル名を出力するプログラムがある場合標準出力そしてそれらを使いたいパラメータとしてこれを行うには、それをtouch使用xargsしてSTDINストリームデータを読み取り、各行をコマンドの空白で区切られた引数に変換する必要があります。

これら2つは同じです。

# touch file1.txt
# echo file1.txt | xargs touch

xargsその機能が何であるか、なぜ必要なのかを正確に知らない限り、使用しないでください。多くのxargs場合、キャストを使用するよりも操作を実行するより良い方法があります。変換プロセスには、エスケープや単語拡張などの潜在的なトラップもあります。

おすすめ記事