Me gusta que @Alex Howansky haya usado 'cmp --silent' para esto. Pero necesito una respuesta tanto positiva como negativa, así que uso:
cmp --silent file1 file2 && echo '### SUCCESS: Files Are Identical! ###' || echo '### WARNING: Files Are Different! ###'
Luego puedo ejecutar esto en la terminal o con un ssh para comparar archivos con un archivo constante.
Para y con seguridad de forma rápida comparar dos archivos cualesquiera:
if cmp --silent -- "$FILE1" "$FILE2"; then
echo "files contents are identical"
else
echo "files differ"
fi
Es legible, eficiente y funciona para cualquier nombre de archivo, incluido "` $()
Creo cmp
se detendrá en la diferencia del primer byte:
cmp --silent $old $new || echo "files are different"
Como apesto y no tengo suficientes puntos de reputación, no puedo agregar este dato como comentario.
Pero, si vas a usar el cmp
comando (y no necesita/quiere ser detallado), simplemente puede tomar el estado de salida. Según el cmp
página man:
Si un ARCHIVO es '-' o falta, lea la entrada estándar. El estado de salida es 0 si las entradas son iguales, 1 si son diferentes, 2 si hay problemas.
Entonces, podrías hacer algo como:
STATUS="$(cmp --silent $FILE1 $FILE2; echo $?)" # "$?" gives exit status for each comparison
if [[ $STATUS -ne 0 ]]; then # if status isn't equal to 0, then execute code
DO A COMMAND ON $FILE1
else
DO SOMETHING ELSE
fi
EDITO:¡Gracias por los comentarios a todos! Actualicé la sintaxis de prueba aquí. Sin embargo, le sugiero que use la respuesta de Vasili si está buscando algo similar a esta respuesta en cuanto a legibilidad, estilo y sintaxis.