Archivos diferenciales presentes en dos directorios diferentes
Tengo dos directorios con la misma lista de archivos. Necesito comparar todos los archivos presentes en ambos directorios usando el diff
comando. ¿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?
Puedes usar el diff
comando 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.
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.
Diff tiene una opción -r
destinada a hacer precisamente eso.
diff -r dir1 dir2
diff
no sólo puede comparar dos archivos, sino que también puede, utilizando la -r
opció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, ...
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 find
que no se debe prefijar las rutas de salida con el directorio raíz.
También agregué sort
para asegurarme de que el orden de los archivos sea el mismo en ambas llamadas de find
.
Al grep
final, se elimina información sobre líneas de entrada idénticas.