Wie erfasse ich die Diff-Ausgabe vom Find-Befehl Exec?

Wie erfasse ich die Diff-Ausgabe vom Find-Befehl Exec?

Ich verwende Ubuntu (Precise 12.04). Ich versuche, ein Bash-Skript zu schreiben, um mithilfe des Diff-Befehls zu sehen, ob die Datei über „awk replace“ geändert wird.

Ich habe einen Test mit Folgendem gemacht:

#! /bin/bash

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

Es funktioniert, also erweitere ich das Skript wie folgt:

#! /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" \;

Das awk funktioniert und der Diff-Befehl funktioniert auch, aber ich konnte die Ausgabe von diff &> /dev/null nicht abrufen und in meiner if-Anweisung erfassen.

Ich gehe davon aus, dass ich beim Ausführen innerhalb der Find-Exec-Anweisung wahrscheinlich dort etwas ändern muss, bin mir aber nicht sicher, wie ich das machen soll.

Antwort1

Ich glaube, ich habe das Problem gefunden. Nachfolgend die korrigierte Version:

#! /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 \;

Ich muss Zeilenumbrüche für die if else-Anweisung hinzufügen

verwandte Informationen