Líbí se mi, že @Alex Howansky k tomu použil 'cmp --silent'. Ale potřebuji pozitivní i negativní odpověď, takže používám:
cmp --silent file1 file2 && echo '### SUCCESS: Files Are Identical! ###' || echo '### WARNING: Files Are Different! ###'
To pak mohu spustit v terminálu nebo pomocí ssh a zkontrolovat soubory proti konstantnímu souboru.
Rychle a bezpečně porovnejte libovolné dva soubory:
if cmp --silent -- "$FILE1" "$FILE2"; then
echo "files contents are identical"
else
echo "files differ"
fi
Je čitelný, efektivní a funguje pro všechny názvy souborů včetně "` $()
Věřím, že cmp
se zastaví na prvním rozdílu bajtů:
cmp --silent $old $new || echo "files are different"
Protože jsem na hovno a nemám dostatek bodů reputace, nemohu přidat tuto lahůdku jako komentář.
Ale pokud se chystáte použít cmp
příkazu (a nepotřebujete/nechcete být podrobný), můžete jednoduše zachytit stav ukončení. Podle cmp
manuálová stránka:
Pokud je FILE '-' nebo chybí, čtěte standardní vstup. Výstupní stav je 0, pokud jsou vstupy stejné, 1, pokud se liší, 2, pokud jsou potíže.
Takže můžete udělat něco jako:
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:Díky všem za komentáře! Zde jsem aktualizoval syntaxi testu. Doporučuji však použít Vasiliho odpověď, pokud hledáte něco podobného této odpovědi z hlediska čitelnosti, stylu a syntaxe.