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

1

Estou trabalhando no OSX e tenho vários arquivos CSV em um diretório. Eu quero verificar se algum deles é idêntico.

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

Isso me diz que o arquivo primeiro é diferente de todos os outros arquivos.

Mas como posso verificar isso em todos os arquivos, sem precisar fazer isso manualmente?

    
por Richard 29.05.2015 / 16:15

3 respostas

3

O seguinte funciona para mim no Linux. Eu não tenho um Mac Terminal para testar se isso funciona.

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

8c3c2e6aa3be26d9f1bbbcd9a401e88e *x
8c3c2e6aa3be26d9f1bbbcd9a401e88e *z

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

    
por 29.05.2015 / 16:30
1

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

shasum * | sort | uniq 

E isso deve fornecer os resultados.

    
por 29.05.2015 / 20:40
0

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 isto é, obviamente, que ele verifica cada arquivo contra todos os outros arquivos, incluindo ele mesmo, mesmo que a verificação já tenha sido feita. Tenho certeza de que há um bom script awk que fará a coisa certa em menos espaço ainda, mas eu não estou me sentindo muito bem agora.

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

    
por 30.05.2015 / 00:40

Tags