find コマンド exec から diff 出力をキャプチャするにはどうすればよいでしょうか?

find コマンド exec から diff 出力をキャプチャするにはどうすればよいでしょうか?

私は Ubuntu (Precise 12.04) を使用しています。diff コマンドを使用して awk replace によってファイルが変更されるかどうかを確認するための bash スクリプトを作成しようとしています。

以下のテストを実行しました:

#! /bin/bash

diff fileA.htm fileB.htm &> /dev/null
if [ $? -ne 0 ]; then
  echo "changed";
else
  echo "not changed";
fi

動作するので、以下のようにスクリプトを拡張します。

#! /bin/bash

find . \( -name '*.htm' -o -name '*.html' \) \
-exec sh -c \
"awk '/START_TAG/{f=1;print;while (getline < \"REPLACEMENT_FILE.tmp\"){print}}/END_TAG/{f=0}!f' \"{}\" > \"{}.awk\"; diff \"{}\" \"{}.awk\" &> /dev/null; \
if [ $? -ne 0 ]; then\
  echo \"{} changed\"; \
else \
  echo \"{} not changed\"; \
fi" \;

awk は動作しており、 diff コマンドも動作していますが、 diff &> /dev/null からの出力を取得して if ステートメントでキャプチャすることができませんでした。

find -exec ステートメント内でこれを実行するときに、おそらく何かを変更する必要があると思いますが、その方法がわかりません。

答え1

問題が見つかったと思います。修正バージョンは以下の通りです。

#! /bin/bash

find . \( -name '*.htm' -o -name '*.html' \) \
-exec sh -c \
$'awk \'/START_TAG/{f=1;print;while (getline < \"REPLACEMENT_FILE.tmp\"){print}}/END_TAG/{f=0}!f\' \"{}\" > \"{}.awk\"; diff \"{}\" \"{}.awk\" &> /dev/null;\n \
if [ $? -ne 0 ]; then\n \
  echo \"{} changed\";\n \
else\n \
  echo \"{} not changed\";\n \
fi'\n \;

if else文に改行を追加する必要がある

関連情報