¿Puedes distinguir todos los files en un directory?

Tengo un montón de files almacenados en varios directorys. Han sido creados en diferentes momentos, pero necesito verificar que sus contenidos sean los mismos. No puedo encontrar cómo hacer un diff en TODOS los files en un directory. ¿Es esto posible o se necesita otra herramienta CLI?

Si no necesita compararlos, y solo necesita saber si son diferentes, puede simplemente diferir cada file en el directory con cualquiera de los files en el directory a través de un for-loop …

for i in ./*; do diff -q "$i" known-file; done

… donde known-file es cualquier file dado en el directory. Si no obtiene salida, ninguno de los files difiere; de lo contrario, obtendrás una list de los files que difieren del known-file .

Usando la utilidad cksum estándar junto con awk :

 find . -type f -exec cksum {} + | awk '!ck[$1$2]++ { print $3 }' 

La utilidad cksum generará tres columnas para cada file en el directory actual. El primero es una sum de comprobación, el segundo es un tamaño de file y el tercero es un nombre de file.

El progtwig awk creará una matriz, ck , codificada en la sum de comprobación y el tamaño. Si la key aún no existe, se imprime el nombre del file.

Esto significa que obtienes los nombres de los files en el directory actual que tienen sums de verificación únicas + tamaño. Si obtienes más de un nombre de file, entonces estos dos tienen diferentes sums de comprobación y / o tamaño.

Pruebas:

 $ ls -l total 8 -rw-r--r-- 1 kk kk 0 Oct 3 16:32 file1 -rw-r--r-- 1 kk kk 0 Oct 3 16:32 file2 -rw-r--r-- 1 kk kk 6 Oct 3 16:32 file3 -rw-r--r-- 1 kk kk 0 Oct 3 16:32 file4 -rw-r--r-- 1 kk kk 6 Oct 3 16:34 file5 $ find . -type f -exec cksum {} + | awk '!ck[$1$2]++ { print $3 }' ./file1 ./file3 

Los files file1 , file4 y file4 están vacíos, pero file5 y file5 tienen cierto contenido. El command muestra que hay dos sets de files: los que son iguales a file1 y los que son iguales a file3 .

También podemos ver exactamente qué files son iguales:

 $ find . -type f -exec cksum {} + | awk '{ ck[$1$2] = ck[$1$2] ? ck[$1$2] OFS $3 : $3 } END { for (i in ck) print ck[i] }' ./file3 ./file5 ./file1 ./file2 ./file4 

Dado un set de files en el directory d, aquí hay resultados para 4 códigos que buscan files duplicates:

 Environment: LC_ALL = C, LANG = C (Versions displayed with local utility "version") OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64 Distribution : Debian 8.9 (jessie) bash GNU bash 4.3.30 fdupes 1.51 jdupes 1.5.1 (2016-11-01) rdfind 1.3.4 duff 0.5.2 ----- Files in directory d: ==> d/f1 <== 1 ==> d/f11 <== 1 ==> d/f2 <== 2 ==> d/f20 <== Now is the time for all good men to come to the aid of their country. ==> d/f21 <== Now is the time for all good men to come to the aid of their country. ==> d/f22 <== Now is the time for all good men to come to the aid of their countryz ==> d/f3 <== 1 ----- Results for fdupes: d/f1 d/f3 d/f11 d/f20 d/f21 ----- Results for jdupes: Examining 7 files, 1 dirs (in 1 specified) d/f1 d/f3 d/f11 d/f20 d/f21 ----- Results for rdfind: Now scanning "d", found 7 files. Now have 7 files in total. Removed 0 files due to nonunique device and inode. Now removing files with zero size from list...removed 0 files Total size is 218 bytes or 218 b Now sorting on size:removed 0 files due to unique sizes from list.7 files left. Now eliminating candidates based on first bytes:removed 1 files from list.6 files left. Now eliminating candidates based on last bytes:removed 1 files from list.5 files left. Now eliminating candidates based on md5 checksum:removed 0 files from list.5 files left. It seems like you have 5 files that are not unique Totally, 74 b can be networkinguced. Now making results file results.txt ----- Results for duff: 3 files in cluster 1 (2 bytes, digest e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e) d/f1 d/f3 d/f11 2 files in cluster 2 (70 bytes, digest 7de790fbe559d66cf890671ea2ef706281a1017f) d/f20 d/f21 

Mis mejores deseos … aplausos, drl

También puedes probar fusión de herramientas GUI.

 meld dir1 dir2 

o

 meld dir1 dir2 dir3 

https://meldmerge.org/help/command-line.html