Si quiero encontrar las diferencias entre dos árboles de directorios, generalmente solo ejecuto:
diff -r dir1/ dir2/
Esto genera exactamente cuáles son las diferencias entre los archivos correspondientes. Estoy interesado en obtener una lista de los archivos correspondientes cuyo contenido difiere. Supuse que esto sería simplemente una cuestión de pasarle una opción de línea de comando diff
, pero no pude encontrar nada en la página del manual.
¿Alguna sugerencia?
dircmp
comando en Unix (no Linux)Respuestas:
Usted dijo Linux, así que tuvo suerte (al menos debería estar disponible, no estoy seguro de cuándo se agregó):
Debería hacer lo que necesita.
Si también desea ver diferencias para archivos que pueden no existir en ninguno de los directorios:
fuente
diff -qr dir1/ dir2/
y mi versión extendida adiff -qr dir1/ dir2/ | grep ' differ'
--brief
a su acceso directo-q
.--brief
.-brief
se interpreta como-b -r -i -e -f
, en otras palabras, como un conjunto de banderas, no como una sola opción.El comando que uso es:
Es exactamente lo mismo que 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:
Pido disculpas por publicar cuando la otra respuesta es perfectamente aceptable. No pude detenerme ... trabajando en ser menos pedante.
fuente
q
soporte? ¿Es una abreviatura de algo? No puedo encontrar ninguna lógica detrás delq
..q
es paraquiet
, generalmente significa menos detallado.Me gusta usar
git diff --no-index dir1/ dir2/
, porque puede mostrar las diferencias de color (si tiene esa opción establecida en su configuración de git) y porque muestra todas las diferencias en una salida paginada larga usando "menos".fuente
--no-index
más en stackoverflow.com/a/1792477/473390 . He actualizado la respuesta de @ alan-porter.--name-status
a la línea de comando, solo mostrará la lista de nombres de archivo con banderas "M / A / D" para el estado Modificado / Agregado / Eliminado.Estos dos comandos hacen básicamente lo que se solicita:
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 sumas de verificación en fragmentos grandes antes de compararlas realmente. Eso agrupa las operaciones de E / S en grandes fragmentos y conduce a un procesamiento más eficiente cuando las cosas tienen lugar en una sola unidad.
fuente
rsync --options /usr /bin /var /sbin /lib /old_root
, comparará efectivamente la raíz actual/
(especificando todos los subdirectorios) y/old_root
(que contiene, por ejemplo, alguna copia de seguridad anterior/
), que es algo quediff -r
puede No lo hagas. Y si asume que los archivos con el mismo tamaño, permisos y marcas de tiempo probablemente no hayan cambiado, la omisión--checksum
le proporcionará una verificación extremadamente rápida (si no es así) de qué archivos podrían haber cambiado.--delete
conrsync
?--dry-run
bandera), nada se elimina realmente,rsync
solo imprime qué archivos están en dir1 pero no en dir2--dry-run
primero siempre para no olvidarlo accidentalmente.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.
fuente
meld
embargo, creo que se vuelve terriblemente lento si se usa en directorios grandes. ¿Hay algo que maneje mejor los directorios grandes?find dir1 dir2 | cut -d/ -f2- | sort | uniq --unique
meld <(find dir1 -ls ) <(find dir2 -ls)
funciona bastante bien, utilizando la sustitución del proceso bash. (zsh's=(command)
funciona aún mejor.)Compatriotas del canal 'billings' (de freenode / # centos fame) compartió su método conmigo:
Incluir la barra diagonal final del directorio no importa.
Además, parece que la
-u
opción no está disponible en algunas versiones anteriores / servidor de diff.La diferencia en diffs:
fuente
--new-file/-N
que hace que diff considere que los archivos faltantes están vacíos y--text/-a
que considera que todas las entradas binarias son texto. No veo las ventajas de este caso de uso en particular.Difoscopio es una gran herramienta de diferencia de directorios basada en la línea de comandos.
Me gusta especialmente que pueda diferir en archivos:
No solo le dirá qué archivos difieren, sino también cómo difieren.
fuente
Para encontrar diff, use este comando:
-r también diferirá todos los subdirectorios -q le dice a diff que informe solo cuando los archivos difieran.
- breve mostrará los archivos que no existen en el directorio.
Si no
Podemos usar Meld, que mostrará en una ventana gráfica que es fácil encontrar la diferencia.
fuente
--brief
Y-q
son la misma opción. Su declaración hace que parezca que son diferentes pero no lo son.Puede también usar
Rsync
yfind
. Parafind
: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 @Alexander mencionó. Funciona bien tanto en Windows como en Linux.
fuente
Para informar diferencias entre dirA y dirB, al tiempo que se actualiza / sincroniza.
rsync -auv <dirA> <dirB>
fuente