Ich mag, dass @Alex Howansky dafür 'cmp --silent' verwendet hat. Aber ich brauche sowohl positive als auch negative Antworten, also verwende ich:
cmp --silent file1 file2 && echo '### SUCCESS: Files Are Identical! ###' || echo '### WARNING: Files Are Different! ###'
Ich kann dies dann im Terminal oder mit ssh ausführen, um Dateien mit einer konstanten Datei zu vergleichen.
Schnell und sicher zwei beliebige Dateien vergleichen:
if cmp --silent -- "$FILE1" "$FILE2"; then
echo "files contents are identical"
else
echo "files differ"
fi
Es ist lesbar, effizient und funktioniert für alle Dateinamen einschließlich "` $()
Ich glaube cmp
stoppt beim ersten Byte-Unterschied:
cmp --silent $old $new || echo "files are different"
Weil ich scheiße bin und nicht genug Reputationspunkte habe, kann ich diesen Leckerbissen nicht als Kommentar hinzufügen.
Aber wenn Sie den cmp
verwenden Befehl (und müssen / wollen nicht ausführlich sein) können Sie einfach den Exit-Status abrufen. Gemäß cmp
Manpage:
Wenn eine DATEI '-' ist oder fehlt, lesen Sie die Standardeingabe. Der Exit-Status ist 0, wenn die Eingaben gleich sind, 1, wenn sie unterschiedlich sind, 2, wenn Probleme auftreten.
Sie könnten also so etwas tun:
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:Danke für die Kommentare an alle! Ich habe die Test-Syntax hier aktualisiert. Ich würde jedoch vorschlagen, dass Sie Vasilis Antwort verwenden, wenn Sie nach etwas Ähnlichem wie dieser Antwort in Lesbarkeit, Stil und Syntax suchen.