如何捕捉 find 指令執行的差異輸出?

如何捕捉 find 指令執行的差異輸出?

我正在使用 Ubuntu(Precise 12.04),我正在嘗試編寫一些 bash 腳本來查看檔案是否透過使用 diff 命令透過 awk 替換進行了更改。

我做了以下測試:

#! /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 語句新增換行符

相關內容