Dado dos árboles de directorios, ¿cómo puedo averiguar qué archivos difieren?

Si quiero encontrar las diferencias entre dos árboles de directorios, generalmente solo ejecuto:

diff -r dir1/ dir2/ 

Esto muestra exactamente cuáles son las diferencias entre los archivos correspondientes. Me interesa obtener una lista de los archivos correspondientes cuyo contenido es diferente. Supuse que esto simplemente sería una cuestión de pasar una opción de línea de comando a diff , pero no pude encontrar nada en la página de manual.

¿Alguna sugerencia?

Dijiste Linux, así que tienes suerte (al menos debería estar disponible, no estoy seguro de cuándo se agregó):

 diff --brief -r dir1/ dir2/ 

Debería hacer lo que necesita.

Si también desea ver diferencias para los archivos que pueden no existir en ninguno de los directorios:

 diff --brief -Nr dir1/ dir2/ 

El comando que uso es:

 diff -qr dir1/ dir2/ 

Es exactamente lo mismo que el de Mark 🙂 Pero su respuesta me molestó ya que usa diferentes tipos de banderas, y me hizo mirar dos veces. Usando las banderas más detalladas de Mark sería:

 diff --brief --recursive dir1/ dir2/ 

Me disculpo por publicar cuando la otra respuesta es perfectamente aceptable. No pude detenerme … trabajando en ser menos pedante.

Me gusta usar git diff --no-index dir1/ dir2/ , ya que puede mostrar las diferencias de color (si tienes esa opción configurada en tu configuración de git) y porque muestra todas las diferencias en una salida larga paginada usando “Menos”.

Estos dos comandos hacen básicamente lo que se pide:

 diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt rsync --recursive --delete --links --checksum --verbose --dry-run /dir1/ /dir2/ > dirdiff_2.txt 

La elección entre ellos depende de la ubicación de dir1 y dir2:

Cuando los directorios residen en dos unidades separadas, diff supera a rsync. Pero cuando los dos directorios comparados están en la misma unidad, rsync es más rápido. Es porque diff pone una carga casi igual en ambos directorios en paralelo, maximizando la carga en las dos unidades.

rsync calcula las sums de comprobación en trozos grandes antes de compararlos realmente. Eso agrupa las operaciones de E / S en grandes porciones y conduce a un procesamiento más eficiente cuando las cosas se llevan a cabo en una sola unidad.

Meld es también una gran herramienta para comparar dos directorios:

meld dir1/ dir2/

Meld tiene muchas opciones para comparar archivos o directorios. Si dos archivos difieren, es fácil ingresar al modo de comparación de archivos y ver las diferencias exactas.

La compatriota ‘facturación’ del canal (de freenode / # centos fame) compartió su método conmigo:

 diff -Naur dir1/ dir2 

Incluir la barra diagonal final del directorio no importa.

Además, parece que la opción -u no está disponible en algunas versiones anteriores / de servidor de diff.

La diferencia en diffs:

 # diff -Nar /tmp/dir1 /tmp/dir2/ diff -Nar /tmp/dir1/file /tmp/dir2/file 28a29 > TEST # diff -qr /tmp/dir1/ /tmp/dir2/ Files /tmp/dir1/file and /tmp/dir2/file differ 

Diffoscope es una gran herramienta de diff de directorio basada en línea de comandos.

Me gusta especialmente que pueda diferir en archivos:

Recostackrá de forma recursiva archivos de muchos tipos y transformará varios formatos binarios en una forma más legible para compararlos. Puede comparar dos archivos tar, ISO o PDF con la misma facilidad.

No solo le dirá qué archivos difieren, sino también cómo difieren.

También puedes usar Rsync y find . Para find :

 find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER 

Pero los archivos con los mismos nombres y en las mismas subcarpetas, pero con contenido diferente, no se mostrarán en las listas.

Si eres fanático de la GUI, puedes consultar Meld que mencionó @Alexander . Funciona bien en Windows y Linux.

El find diff usa este comando:

 diff -qr dir1/ dir2/ 

-r también diferirá todos los subdirectorios -q le dice a diff que informe solo cuando los archivos son diferentes.

 diff --brief dir1/ dir2/ 

–brief mostrará los archivos que dosent existen en el directorio.

Si no

podemos usar Meld, que se mostrará en la ventana gráfica, es fácil encontrar la diferencia.

 meld dir1/ dir2/