find 명령 exec에서 diff 출력을 캡처하는 방법은 무엇입니까?

find 명령 exec에서 diff 출력을 캡처하는 방법은 무엇입니까?

저는 Ubuntu(정확한 12.04)를 사용하고 있습니다. diff 명령을 사용하여 awk 교체를 통해 파일이 변경되었는지 확인하기 위해 일부 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 문에 줄 바꿈을 추가해야 합니다.

관련 정보