入力リストが指定された各入力に対してコマンドを実行する方法

入力リストが指定された各入力に対してコマンドを実行する方法

複数のフォルダがあり、各フォルダにCDを挿入してコマンドを実行したいと思います。私はこれが次のようになるべきだと思います。

(次は私がやりたいことを人為的に単純化した例です。)

ls | xargs echo 'Looking at {}' && cd {} && /bin/do_stuff

しかし、これはうまくいきません。どうすればいいですか?

ベストアンサー1

xargsコマンドが直接実行されるため動作しません。これは、1行のシェルコードも許可せず、実行のためにコマンドをシェルに渡します。実際、これらすべて&&はシェルによって解釈されます今後 ls走ってもxargs。また、{}はわかりやすい構造findですxargs

(必要に-I応じてwithを使用してxargsこの機能をまねることができますfind。)

最も簡単な方法xargsは、コマンドをシェルスクリプトに入れることです。

#!/bin/sh
echo "Looking at $1"
cd $1
/bin/do_stuff

(他のサブディレクトリのみを含むディレクトリで実行している限り、失敗しないように見え、失敗しないため、これを実際に置き換えました。 "and"動作が必要な場合は、スクリプトに必要な修正は明らか&&です。);echocd

次にシェルスクリプトを実行しますxargs。あなたがそれを呼び出す場合dostuff.sh

$ ls | xargs ./dostuff.sh

dostuff.sh同様に実行可能としてマークする必要がありますchmod +x dostuff.sh

おそらく、これらすべてを一行で書く方法がありますsh -c。しかし、このようなことをする魔法を覚えていなければ、それはただ好奇心に過ぎませんか?

おすすめ記事