¿Hay una herramienta de diferencias profundas de Linux que también compare los attributes de los files?

¿Existe una herramienta de Linux como diff que compare recursivamente files y directorys, pero con la adición de también comparar: attributes extendidos, acl, contexts se?

Lo he hecho antes de usar rsync -aHAX --delete recordando agregar los indicadores -n y -i .

Esto es un poco contrario a la intuición, pero tengan paciencia conmigo. El command rsync principal es lo que necesitarías para sincronizar los dos directorys. Pero -n -i hace que NO se sincronice (es decir, se ejecuta en seco) y simplemente imprime lo que habría hecho y por qué. No es fantástico analizar, pero puede get el nombre de file fácilmente y canalizarlo a ls o similar.

Esto includeá todo, incluidos mtimes, dates, etc., así como no realizar el seguimiento en los nodos del dispositivo, sockets, pipes nombrados, etc. La command-line que se encuentra arriba también mira las ACL y los attributes extendidos. Puede ajustar lo que está mirando cambiando las opciones a rsync , limítelo a un dispositivo con -x , cambie el comportamiento de los enlaces suaves y duros, etc.

janos ya dijo qué hacer:

 find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b diff -uab 

Y el man 1 stat dice:

 %A access rights in human readable form %C SELinux security context string %F file type %g group ID of owner %u user ID of owner %s total size, in bytes %Y time of last modification, seconds since Epoch %n file name 

Para comparar el contenido del file, puede usar:

 find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35- as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash 

Aquí hay un script rápido de bash que escribí para comparar los attributes extendidos. Imprime todos los nombres de file y luego cualquier diferencia en los attributes:

 cd a export relpath=[path/to/b/from/a] for filename in $(find .); do echo $filename; diff <(xattr -l $filename) <(xattr -l $relpath/$filename); done 

Tomando prestado de otra respuesta, podemos modificar esto para usar stat lugar de xattr :

 for filename in $(find .); do echo $filename; diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename); done