Cómo comparar diferencias entre directorios (Linux)

24

Tengo dos directorios: uno de la copia de seguridad anterior y el segundo de la copia de seguridad más reciente. ¿Cómo comparo qué cambios se realizaron en los archivos del directorio desde la última copia de seguridad en Linux? Además, ¿cómo visualizo los cambios, por ejemplo, en archivos de texto y php? Estoy pensando en algo como el historial de revisiones en wikipedia, donde se ve la versión anterior en un lado de la pantalla y la versión más nueva en el otro, y se resaltan los cambios. ¿Cómo logro algo así?

editar: ¿Cómo comparo el directorio remoto con el local?

Phil
fuente

Respuestas:

35

Desde la página de manual de diff:

Si tanto from-file como to-file son directorios, diff compara los archivos correspondientes en ambos directorios, en orden alfabético; esta comparación no es recursiva a menos que se proporcione la opción -r o --recursive. diff nunca compara el contenido real de un directorio como si fuera un archivo. El archivo que está completamente especificado puede no ser una entrada estándar, porque la entrada estándar no tiene nombre y la noción de "archivo con el mismo nombre" no se aplica.

Entonces, para comparar directorios: diff --brief -r dir1 dir2

Para comparar archivos uno al lado del otro: diff --side-by-side file1 file2

Sean Staats
fuente
genial, lo intentaré
Phil
... me pregunto cómo puedo comparar el directorio remoto con el directorio local.
Phil
1
Tendría que montar el directorio remoto en la máquina local. Sin embargo, puede comparar archivos de forma remota de la siguiente manera: ssh REMOTE_SERVER "cat / path / to / some / file" | diff --side-by-side / path-to-some-file - Otra cosa, el comando 'sdiff' funciona como 'diff --side-by-side' si desea guardar algo de escritura.
Sean Staats
2
Use NFS para montar el directorio remoto. En el servidor remoto (servidor-b), edite / etc / exports y coloque lo siguiente en él: / ruta / de / directorio / para / compartir servidor-a.ip.address (ro, no_root_squash) Inicie NFS en servidor-b (/etc/init.d/nfs start) Monte en su servidor local (servidor-a) agregando lo siguiente a / etc / fstab: server-b.ip.add: / path / of / directory / to / share / mnt / server-b nfs rsize = 32768, wsize = 32768, rw 0 0 Luego en server-a, mkdir / mnt / server-b; mount / mnt / server-b Gracias por los votos a favor.
Sean Staats
2
Puede usar sshfspara crear un directorio en red temporal ad-hoc, en lugar de usar NFS.
Dan Andreatta
3

Asumiendo:

  • estamos en www1comparación con el control remotowww2
  • hay autenticación de clave pública de local www1a remotawww2
  • comparamos como el mismo usuario en local www1y remotowww2
buscar / var / www / html / -name "*" -exec md5sum -b {} \; El | grep -v "/ var / www / html / exclude_este directorio"> local.md5
ssh www2 "find / var / www / html / -name '*' -exec md5sum -b {} \; | grep -v / var / www / html / exclude_this dir> remote.md5"
scp www2: remote.md5.
diff local.md5 remote.md5 
usuario69366
fuente
3

Realmente desea combinar el poder de rsyncreducir el consumo de ancho de banda con el poder de diffbrindarle flexibilidad y buena diferencia.

Entonces algo como esto:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

Supongo que podría ajustar esto un poco si lo estuviera haciendo a menudo en rsynclugar de usarlo cpen la primera línea, obviamente en la última línea tiene todo el poder de diffformatearlo como desee. Probablemente con y en el caso de los OP

La desventaja de este enfoque es que terminas usando el doble de espacio local, pero a menos de $ 1 / concierto ¿a quién le importa?

ErichBSchulz
fuente
cp --reflink=auto --sparse=alwaysno usar espacio para la copia dependiendo del FS subyacente.
Tom Hale
1

Haga las diff old_dir new_dir > diff.txtdiferencias de lado a lado en el mismo servidor.

Para archivos remotos:

Por ejemplo: ABC es un servidor existente y XYZ es su servidor remoto y el nombre del directorio es 123.

Paso 1: Cambie el nombre del directorio 123 existente en el servidor ABC como 123_ABC.

ABC:/Home > mv 123 123_ABC

Paso 2: Cree un nuevo directorio en el servidor ABC:

ABC: > mkdir 123_XYZ

Paso 3: Copie todos los archivos del directorio 123 en el servidor XYZ al directorio 123_XYZ en el servidor ABC:

XYZ/123 > scp * userid@ABC: /123_XYZ

Esto copiará todos los archivos del directorio en su servidor XYZ a su servidor ABC / directorio 123_XYZ.

Paso: 4: Haz la diferencia entre ambos directorios:

Ahora vaya al servidor ABC y realice la diferencia entre 123_ABC y 123_XYZ

ABC > diff 123_ABC 123_XYZ > diff.txt

El comando anterior guardará los resultados de diff en diff.txt en la misma ruta.

Puedes comparar las diferencias entonces.

Gracias,

Mehul

mehul
fuente
0

AIDE Advanced Intrusion Detection Environment (AIDE) es un verificador de integridad de archivos para sistemas operativos UNIX. Su propósito es proporcionar informes sobre la integridad de los datos en los sistemas de archivos compatibles. Al ejecutar AIDE varias veces en el host de destino, puede determinar qué archivos están cambiando. Al ejecutar AIDE varias veces en diferentes hosts, puede determinar qué archivos y permisos son diferentes. Luego use una herramienta GUI DIFF en los archivos "diferentes" informados.

O utilice una herramienta gui diff como meld, guiffy, kdiff3, diff, vimdiff, gvimdiff, Emacs, Kompare, Diffuse, Easydiff, TkDiff o xxdiff. La mayoría hará diferencias de directorio además de las diferencias de archivo. Necesitará montar la unidad remota usando NFS, SMBFS o SSHFS como otros han mencionado.


fuente
0

O puede usar dos archivos con la salida de la lista de archivos. Y luego compara esos dos archivos. Por ejemplo:

/path/to/compare/remote$: ls > remote-files 

/path/to/compare/local$: ls > local-files 

Descargue uno de los archivos.

-rw-r - r-- 1 1015 1015 26624 2005-06-14 13:10 FILE.TXT  

para ARCHIVAR.TXT

Use diff ( diff -y remote-files local-files > diff-files) para compararlos uno al lado del otro. Abra los archivos diff y verifíquelo. Cada línea con> significa un archivo diferente.

Mark Henderson
fuente