"find --exec"のシェル変数に "{}"の内容を割り当てる方法

ディレクトリ内の各xmlファイルを繰り返し、make NAME =を実行するスクリプトを作成しようとしています。ここで、NMはファイル名の減算です。変数にプレースホルダを割り当てる.xmlのに問題があります。{}〜のように

find . -iname "*.xml" -exec foo=$(echo {}); gmake NAME=$FOO \;

何も割り当てられていないため動作しません$FOO

ベストアンサー1

IRCで多くの検索をした後、誰かが次の答えを教えてくれました。

find . -iname "*.xml" -exec bash -c 'echo "$1"' bash {} \;

または私の例では(混乱を避けるために文字列を削除してください)

find . -iname "*.xml" -exec bash -c 'gmake NAME="$1"' bash {} \;

どのように機能するかは、bashが次のパラメータを-cパラメータとして取り、何をすべきかbash {}{}割り当て、それをpaddingに使用することです。たとえば、コンテンツはエラーメッセージに使用されるため、単純なプレースホルダではないため、または同じものを使用したくありません。$1$0bash$0$0_''

呼び出しごとに複数のファイルを処理するにはbash

find . -iname "*.xml" -exec bash -c '
   ret=0
   for file do
       gmake NAME="$file" || ret=$?
   done
   exit "$ret"' bash {} +

gmakeこのメソッドには、呼び出しが失敗した場合に終了ステータスfindとして報告されるという追加の利点があります。

より多くの情報は以下から得ることができる。http://mywiki.wooledge.org/UsingFind#Complex_actions

おすすめ記事