Comparar treees de directorys con respecto al nombre del file (y tamaño y date)

Quiero verificar los resultados de una restauración desde la copy de security. Esto es así porque TimeMachine en MacOS me da algunos errores y advertencias extrañas y quiero asegurarme de que todo vuelva a estar en su lugar después de la restauración. Aunque no confío en que TimeMachine recupere todos los files, confío en que ponga todos los files que restaura con el contenido correcto.

Pensé en diff -r, pero pasar por aproximadamente 300 GiB puede durar eternamente. Estoy bien para comparar al less la presencia de files, pero comparar el tamaño y la date en la misma ejecución es aún mejor.

Soy consciente de soluciones como

diff <(ls -R $PATH1) <(ls -R $PATH2) 

pero la salida es difícil de leer. Prefiero una sola línea por file que se encuentra en un solo lado. También tengo que confiar en que procedo a través del tree en el mismo order en ambos lados. Esto puede ser diferente porque los filesystems pueden diferir.

Me encantaría get una herramienta para el perezoso que lleva dos pathes y salidas de las diferencias hasta cualquier nivel de inspección deseado, tal vez algo fuera de macports. Pero no temo los bashismos amplios.

La "solución" que mencionas es realmente mala (no puede tratar con nombres de files raros, por ejemplo) y es completamente innecesaria. Solo use diff directamente:

 diff -r "$PATH1" "$PATH2" 

Eso recursivamente ( -r ) comparará los directorys e informará si los files están presentes o si faltan. Por ejemplo:

 $ tree . ├── dirA │  ├── file1 │  └── file2 └── dirB └── file{1} $ diff -qr dirA dirB Files dirA/file1 and dirB/file1 differ Only in dirA: file2 Only in dirB: file3 

La opción -q significa "silencioso", solo informará si los files difieren sin imprimir las diferencias. En el ejemplo anterior, los files dirA/file1 dirB/file1 y dirB/file1 tienen diferentes contenidos. Este formatting es tan simple como puede esperar y será bastante rápido incluso para grandes directorys.

Aquí está su solución:

 rsync -nrv --delete dirA/ dirB/ 

En lugar de hacer que las dos carpetas sean idénticas, usamos rsync para mostrar solo lo que haría . Ese es el efecto de -n . ¡Cuidado, no olvides agregar esta opción!

El -r significa un análisis recursivo, el -v da el listdo detallado deseado. Puede agregar otro -v para get todos los iguales también.

La --delete dice a rsync que simule la eliminación de los files de destino que no existen en la fuente. Sin el dirB -n , la carpeta dirB se volvería idéntica a dirA .

De forma pnetworkingeterminada, rsync solo verifica el nombre y la timestamp de los files, que es exactamente la opción rápida que estaba solicitando. Si desea un comportamiento similar como el comportamiento de diff (e igualmente lento), puede agregar un -c para aplicar la comparación de sum de comprobación.

 rsync -nrvc --delete dirA/ dirB/ 

Tenga en count el uso de barras diagonales en dirA/ y dirB/ , son significativas en rsync . Para get más información, estudie la página man de rsync , tiene mucho sentido acostumbrarse a este poderoso command.