Resultado silencioso com dois arquivos idênticos no diff: como mostrá-los?

1

Quando eu configuro o parâmetro -s , diff também imprime arquivos diferentes.

diff -s $FIRST_FILE $SECOND_FILE
    
por FezZ 25.02.2016 / 17:25

4 respostas

0

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.

    
por 25.02.2016 / 23:46
4

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 25.02.2016 / 23:32
2

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
    
por 25.02.2016 / 17:34
0

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"
    
por 25.02.2016 / 23:15