Lo siguiente (si sustituye el primer directorio por el directorio 1 y el segundo por el directorio 2) debería hacer lo que está buscando y rápidamente:
find directory1 -type d -printf "%P\n" | sort > file1
find directory2 -type d -printf "%P\n" | sort | diff - file1
El principio fundamental es que imprime todos los directorios, incluidas las rutas de los subdirectorios en relación con los directorios del directorio baseN.
Esto podría fallar (producir resultados extraños) si tiene retornos de carro en algunos de los nombres de directorio pero no en otros.
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
le dará una buena visualización de lado a lado de las dos jerarquías de directorios con las secciones comunes plegadas.
Usualmente uso rsync
para esta tarea:
rsync -nav --delete DIR1/ DIR2
TEN MUCHO CUIDADO usar siempre el -n
, también conocido como --dry-run
, opción, o sincronizará (cambiará el contenido de) los directorios.
Esto comparará los archivos en función de los tiempos y tamaños de modificación de archivos... Creo que eso es lo que realmente quieres, o al menos no te importa si hace eso? Tengo la sensación de que solo quieres que suceda más rápido , no es que lo necesite para ignorar la diferencia entre los contenidos del archivo. Si desea que no enumere archivos diferentes con nombres idénticos, creo que la adición de --ignore-existing
opción hará eso.
También tenga en cuenta que no poner un /
al final de DIR1
hará que compare el directorio DIR1
con los contenidos de DIR2
.
La salida termina siendo un poco detallada, pero le mostrará qué archivos/directorios difieren. Archivos/directorios presentes en DIR2
y no en DIR1
estará precedido por la palabra deleting
.
Para algunas situaciones, la respuesta de @slartibartfast puede ser más apropiada, aunque deberá eliminar el -type d
opción para habilitar la lista de archivos que no son de directorio. rsync
será más rápido si tiene una cantidad significativa de archivos/directorios para comparar.