Compruebe si dos archivos en un directorio son idénticos.

Compruebe si dos archivos en un directorio son idénticos.

Estoy trabajando en OSX y tengo varios archivos CSV en un directorio. Quiero comprobar si dos de ellos son idénticos.

He intentado:

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

Esto me dice que los dos primeros archivos son diferentes.

También lo intenté:

 diff -q --from-file *.csv

Esto me dice que elprimeroEl archivo es diferente de cualquier otro archivo.

Pero, ¿cómo puedo verificar esto para cada archivo sin tener que hacerlo manualmente?

Respuesta1

Lo siguiente me funciona en Linux. No tengo una terminal Mac para probar si esto funciona allí.

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

8c3c2e6aa3be26d9f1bbbcd9a401e88e *x
8c3c2e6aa3be26d9f1bbbcd9a401e88e *z

El programa uniqrequiere entrada ordenada. Consulte su página de manual para conocer otras opciones de salida.

Respuesta2

Además de la respuesta de Steven, debes ingresar esto en la terminal:

shasum * | sort | uniq 

Y eso debería proporcionarle los resultados.

Respuesta3

Lo que realmente quieres es un buen script de shell. Un script de muerte cerebral sería:

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

El problema con esto es, por supuesto, que compara cada archivo con todos los demás, incluido él mismo, incluso si la verificación ya se ha realizado. Estoy seguro de que hay un buen script awk que hará lo correcto en incluso menos espacio, pero no me siento muy incómodo en este momento.

Otras opciones para diferenciar que quizás le gustaría considerar son -w si los espacios en blanco no tienen importancia, -b si la presencia de espacios en blanco es importante pero realmente no le importa cuánto o de qué tipo haya, --strip- trailing-cr si algunos de los archivos se crearon en un sistema que cree que necesita tanto una nueva línea como un retorno de carro.

información relacionada