linux - todos - Dados dos árboles de directorios, ¿cómo puedo saber qué archivos difieren?
mover todos los archivos de un directorio a otro en linux (9)
Si quiero encontrar las diferencias entre dos árboles de directorios, normalmente ejecuto:
diff -r dir1/ dir2/
Esto produce exactamente cuáles son las diferencias entre los archivos correspondientes. Me interesa solo obtener una lista de los archivos correspondientes cuyo contenido difiera. Asumí que esto sería simplemente 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?
El comando que uso es:
diff -qr dir1/ dir2/
Es exactamente igual a la de Mark :) Pero su respuesta me molestó, ya que utiliza diferentes tipos de banderas y me hizo ver 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 podía detenerme ... trabajando en ser menos pedante.
El find diff usa este comando:
diff -qr dir1/ dir2/
-r también difiere todos los subdirectorios -q le dice a diff que informe solo cuando los archivos difieren.
diff --brief dir1/ dir2/
--brief mostrará los archivos que existen en el directorio.
Si no
Podemos usar Meld que mostrará en la ventana gráfica que es fácil encontrar la diferencia.
meld dir1/ dir2/
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 sumas de comprobación en grandes porciones antes de realmente compararlas. Eso agrupa las operaciones de E / S en grandes porciones y conduce a un procesamiento más eficiente cuando las cosas tienen lugar en una sola unidad.
Las ''facturaciones'' de los compatriotas del canal (de freenode / # centos fame) compartieron su método conmigo:
diff -Naur dir1/ dir2
Incluyendo el directorio final barra diagonal hacia adelante no importa.
Además, parece que la opción -u
no está disponible en algunas versiones antiguas / 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
Me gusta usar git diff --no-index dir1/ dir2/
, porque puede mostrar las diferencias de color (si tiene esa opción configurada en su configuración de git) y porque muestra todas las diferencias en una salida paginada larga usando "Menos".
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 verificar Meld que mencionó . Funciona bien tanto en windows como en linux.
Usted dijo Linux, por lo que tuvo suerte (al menos debería estar disponible, no estoy seguro de cuándo se agregó):
diff --brief -r dir1/ dir2/
Debes hacer lo que necesites.
Si también desea ver diferencias para archivos que pueden no existir en ninguno de los directorios:
diff --brief -Nr dir1/ dir2/
Diffoscope es una gran herramienta de diferencia de directorio basada en línea de comandos.
Me gusta especialmente que se pueda dividir en archivos:
Desempaquetará recursivamente archivos de muchos tipos y transformará varios formatos binarios en una forma más legible por el hombre para compararlos. Puede comparar dos archivos comprimidos, imágenes ISO o PDF con la misma facilidad.
No solo le dirá qué archivos difieren, sino también cómo difieren.
Meld también es 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.