Archivos diferenciales presentes en dos directorios diferentes

Resuelto Sudar asked hace 14 años • 9 respuestas

Tengo dos directorios con la misma lista de archivos. Necesito comparar todos los archivos presentes en ambos directorios usando el diffcomando. ¿Existe una opción de línea de comando simple para hacerlo, o tengo que escribir un script de shell para obtener la lista de archivos y luego recorrerlos en iteración?

Sudar avatar Jan 07 '10 18:01 Sudar
Aceptado

Puedes usar el diffcomando para eso:

diff -bur folder1/ folder2/

Esto generará una diferencia recursiva que ignora los espacios, con un contexto unificado:

  • La bandera b significa ignorar los espacios en blanco.
  • La bandera u significa un contexto unificado (3 líneas antes y después)
  • La bandera r significa recursiva.
Laurent Etiemble avatar Jan 07 '2010 11:01 Laurent Etiemble

Si sólo está interesado en ver los archivos que difieren, puede utilizar:

diff -qr dir_one dir_two | sort

La opción "q" solo mostrará los archivos que difieren pero no el contenido que difiere, y "ordenar" organizará la salida alfabéticamente.

Suresh avatar Mar 04 '2013 08:03 Suresh

Diff tiene una opción -rdestinada a hacer precisamente eso.

diff -r dir1 dir2

CodeRain avatar Jan 07 '2010 11:01 CodeRain

diffno sólo puede comparar dos archivos, sino que también puede, utilizando la -ropción, recorrer árboles de directorios completos, comprobando de forma recursiva las diferencias entre subdirectorios y archivos que se producen en puntos comparables de cada árbol.

$ man diff

...

-r  --recursive
        Recursively compare any subdirectories found.

...

Otra buena opción es el difoscopio über-diff-tool :

$ diffoscope a b

También puede emitir diferencias como JSON, html, markdown, ...

miku avatar Jan 07 '2010 11:01 miku

Si específicamente no desea comparar el contenido de los archivos y solo verificar cuál no está presente en ambos directorios, puede comparar listas de archivos, generadas por otro comando.

diff <(find DIR1 -printf '%P\n' | sort) <(find DIR2 -printf '%P\n' | sort) | grep '^[<>]'

-printf '%P\n'indica findque no se debe prefijar las rutas de salida con el directorio raíz.

También agregué sortpara asegurarme de que el orden de los archivos sea el mismo en ambas llamadas de find.

Al grepfinal, se elimina información sobre líneas de entrada idénticas.

Piotr Siupa avatar Dec 13 '2019 22:12 Piotr Siupa