Verifique se dois arquivos em um diretório são idênticos?

Verifique se dois arquivos em um diretório são idênticos?

Estou trabalhando no OSX e tenho vários arquivos CSV em um diretório. Quero verificar se dois deles são idênticos.

Eu tentei:

cmp file1.csv file2.csv || echo "files are different"

Isso me diz que os dois primeiros arquivos são diferentes.

Eu também tentei:

 diff -q --from-file *.csv

Isto me diz que oprimeiroarquivo é diferente de qualquer outro arquivo.

Mas como posso verificar isso para cada arquivo, sem precisar fazer isso manualmente?

Responder1

O seguinte funciona para mim no Linux. Não tenho um Terminal Mac para testar se funciona aí.

$ md5sum * | sort | uniq --check-chars=32 --group
36da49e13da596245e85e9e47ab8a04f *y

8c3c2e6aa3be26d9f1bbbcd9a401e88e *x
8c3c2e6aa3be26d9f1bbbcd9a401e88e *z

O programa uniqrequer entrada classificada. Verifique sua página de manual para outras opções de saída.

Responder2

Além da resposta de Steven, você deve inserir isto no terminal:

shasum * | sort | uniq 

E isso deve fornecer os resultados.

Responder3

O que você realmente quer é um bom script de shell. Um script de shell com morte cerebral seria:

for i in `ls`; do diff -sq --from-file=$i `ls` 2> /dev/null; done | grep identical

O problema com isso é, obviamente, que ele compara cada arquivo com todos os outros arquivos, incluindo ele mesmo, mesmo que a verificação já tenha sido feita. Tenho certeza de que existe um script awk legal que fará a coisa certa em ainda menos espaço, mas não estou me sentindo muito estranho agora.

Outras opções de comparação que você pode considerar são -w se o espaço em branco não tiver consequências, -b se a presença de espaço em branco for importante, mas você realmente não se importa com quanto ou de que tipo existe, --strip- trailing-cr se alguns dos arquivos foram criados em um sistema que acha que precisa de uma nova linha e de um retorno de carro.

informação relacionada