Mi piace che @Alex Howansky abbia usato "cmp --silent" per questo. Ma ho bisogno di una risposta sia positiva che negativa, quindi uso:
cmp --silent file1 file2 && echo '### SUCCESS: Files Are Identical! ###' || echo '### WARNING: Files Are Different! ###'
Posso quindi eseguirlo nel terminale o con un ssh per confrontare i file con un file costante.
In modo rapido e sicuro confronta due file qualsiasi:
if cmp --silent -- "$FILE1" "$FILE2"; then
echo "files contents are identical"
else
echo "files differ"
fi
È leggibile, efficiente e funziona con qualsiasi nome di file incluso "` $()
Credo cmp
si fermerà alla prima differenza di byte:
cmp --silent $old $new || echo "files are different"
Poiché faccio schifo e non ho abbastanza punti reputazione, non posso aggiungere questo bocconcino come commento.
Ma, se hai intenzione di utilizzare il cmp
comando (e non hai bisogno/vuoi essere prolisso) puoi semplicemente prendere lo stato di uscita. Secondo il cmp
pagina man:
Se un FILE è '-' o mancante, leggi lo standard input. Lo stato di uscita è 0 se gli ingressi sono uguali, 1 se diversi, 2 se guasto.
Quindi, potresti fare qualcosa del tipo:
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
EDIT:Grazie per i commenti a tutti! Ho aggiornato la sintassi del test qui. Tuttavia, ti suggerirei di utilizzare la risposta di Vasili se stai cercando qualcosa di simile a questa risposta in termini di leggibilità, stile e sintassi.