Estoy usando Ubuntu (Precise 12.04). Estoy intentando escribir algún script bash para ver si el archivo se cambia mediante awk replace usando el comando diff.
Hice una prueba con lo siguiente:
#! /bin/bash
diff fileA.htm fileB.htm &> /dev/null
if [ $? -ne 0 ]; then
echo "changed";
else
echo "not changed";
fi
Funciona, así que estoy ampliando el script como se muestra a continuación:
#! /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" \;
El awk está funcionando y el comando diff también está funcionando, pero no pude obtener el resultado de diff &> /dev/null y capturarlo en mi declaración if.
Al ejecutar, supongo que dentro de la declaración find -exec probablemente necesito cambiar algo allí, pero no estoy seguro de cómo hacerlo.
Respuesta1
Creo que encontré el problema, la versión solucionada a continuación:
#! /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 \;
Necesito agregar saltos de línea para la declaración if else