Tengo dos directorios con la misma lista de archivos. Necesito comparar todos los archivos presentes en ambos directorios usando el diff
comando. ¿Hay 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?
303
diff
comando descargando las utilidades GNU para Win32 .-b
ignora los cambios en los espacios en blanco y-u
da 3 líneas de búfer.diff -rub folder1/ folder2/
-bur
que sería fácil de recordar si vivieras en un clima frío.Si solo le interesa ver los archivos que difieren, puede usar:
La opción "q" solo mostrará los archivos que difieren pero no el contenido que difiere, y "ordenar" organizará la salida alfabéticamente.
fuente
diff
de cada par de archivos diferentes. El enfoque de uno sería muy diferente si solo uno o dos archivos difieren en comparación con si docenas de archivos difieren. ¡Podría perderme en la salida dediff
ing decenas de archivos a la vez!-x PATTERN
comando para excluir ciertos subdirectorios. Por ejemplo,diff -qr repo1 repo2 -x ".git"
comparará dos directorios (repo1 y repo2) pero excluirá los archivos en la carpeta .git de los directorios respectivos.Diff tiene una opción
-r
que está destinada a hacer precisamente eso.diff -r dir1 dir2
fuente
diff
no solo puede comparar dos archivos, sino que, mediante la-r
opción, puede recorrer árboles de directorios completos, verificando recursivamente las diferencias entre subdirectorios y archivos que ocurren en puntos comparables en cada árbol.fuente
Si es GNU diff, debería poder apuntarlo a los dos directorios y usar la opción -r.
De lo contrario, intente usar
Nota: como señaló Dennis en la sección de comentarios, en realidad no es necesario hacer la sustitución de comandos en el ls. He estado haciendo esto durante tanto tiempo que estoy haciendo esto prácticamente en piloto automático y sustituyendo el comando que necesito para obtener mi lista de archivos para comparar.
También olvidé agregar que hago '\ ls' para deshabilitar temporalmente mi alias de ls a GNU ls para que pierda la información de formato de color de la lista devuelta por GNU ls.
fuente
ls
:for i in ./dir1/*
Aquí hay un script para mostrar las diferencias entre los archivos en dos carpetas. Funciona de forma recursiva. Cambiar dir1 y dir2.
fuente
Si no desea comparar específicamente el contenido de los archivos y solo verifica cuál no está presente en ambos directorios, puede comparar listas de archivos, generadas por otro comando.
-printf '%P\n'
le indicafind
que no prefija las rutas de salida con el directorio raíz.También he agregado
sort
para asegurarme de que el orden de los archivos será el mismo en ambas llamadasfind
.Al
grep
final, se elimina la información sobre líneas de entrada idénticas.fuente
Prueba esto:
fuente