
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 uniq
requer 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.