Uma possível solução pode ser:
diff -s $FIRST_FILE $SECOND_FILE > /dev/null
if [ $? -eq 0 ]; then
echo "The files are identical"
fi
NOTA: Mudou o texto da pergunta.
Quando eu configuro o parâmetro -s
, diff
também imprime arquivos diferentes.
diff -s $FIRST_FILE $SECOND_FILE
A filosofia do Unix é ter uma ferramenta por trabalho e o shell para juntá-las. Então, uma ferramenta para comparar e uma ferramenta para obter o formato de saída desejado.
Neste caso, o formato de saída é suficientemente simples para que esta parte possa ser feita diretamente com o shell.
Para comparar dois arquivos, se você estiver interessado apenas em saber se eles têm o mesmo conteúdo e não em listar as diferenças, use cmp
.
if cmp -s -- "$FIRST_FILE" "$SECOND_FILE"; then
printf '%s\n' "$FIRST_FILE = $SECOND_FILE"
fi
Por padrão, diff
é silencioso quando recebe arquivos idênticos; esse é o único aspecto de seu comportamento que -s
altera. Por isso, sempre compara arquivos e gera diferenças; com -s
também gera uma mensagem quando os arquivos são idênticos, sem -s
não menciona arquivos idênticos.
Você pode obter o comportamento que eu estou procurando, combinando -q
e -s
; -q
instrui diff
para indicar apenas que os arquivos são diferentes (quando ocorrem), sem detalhar as diferenças.
Veja um exemplo:
$ echo 1 > a
$ echo 2 > b
$ echo 2 > c
$ diff -qs a b
Files a and b differ
$ diff -qs b c
Files b and c are identical
Eu coloquei aspas nos nomes dos arquivos, você também deve alterar os nomes dos arquivos para minúsculas.
diff "${FIRST_FILE}" "${SECOND_FILE}" > /dev/null && echo "Same"