¿Cómo difiero los archivos / carpetas en las máquinas siempre que la única conectividad disponible sea ssh?
¿Cómo difiero los archivos / carpetas en las máquinas siempre que la única conectividad disponible sea ssh?
Respuestas:
Puedes hacerlo con la sustitución del proceso de Bash :
diff foo <(ssh myServer 'cat foo')
O, si ambos están en servidores remotos:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
Finalmente encontré una gran solución: vimdiff
vimdiff /path/to/file scp://remotehost//path/to/file
gracias a http://linux.spiney.org/remote_diff_with_vim_and_ssh ver también http://www.vim.org/scripts/script.php?script_id=1075 .
//
después de la remotehost
es importante. La barra simple no funcionará
vimdiff /path/to/file scp://username@remotehost//path/to/file
Aquí hay otra receta de línea de comando rápida y sucia. A diferencia de la respuesta elegida, funciona dentro de makefiles:
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
¿Usar scp para llevar los archivos a una máquina común y diferenciarlos allí?
O, si solo quiere saber si los archivos son diferentes o no, hágalos con md5sum en cada máquina.
También podría buscar algo como SSHFS , pero no sé qué tan bien funciona un algoritmo como diff sobre eso.
rsync --dry-run
.
Una forma, si es posible en su sistema, sería simplemente montar el sistema de archivos remoto con sshfs .
Puede usar rsync
en modo de ejecución en seco, como se sugiere brevemente en otra respuesta . Enumera todos los archivos que son diferentes.
Para eso, use las rvnc
opciones ( r
= recursivo, v
= detallado, n
= ejecución en seco, c
= suma de verificación). Con rsync
en modo pull ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), un ejemplo es:
rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .
Recuerde , esto no proporciona información sobre si el archivo local o remoto es más nuevo. Solo si difieren.
en su máquina local, haga una copia recursiva del directorio que desea diferenciar. Por ejemplo:
cp -R dir replica
use rsync para replicar el directorio remoto sobre la copia local:
rsync remote:/path/to/dir replica
use diff para encontrar la diferencia entre el directorio local y la réplica local del remoto:
diff dir replica
Así es como lo hice.
Utilicé SFTP en el servidor remoto e ingresé mi nombre de usuario / pwd cuando se me solicitó. Luego usé el directorio que se creó en el directorio .gvfs en mi directorio de inicio en el comando diff.
diff -r - resumen / inicio / usuario dir / .gvfs / SFTP \ on \ freenas.local / ruta al directorio / dir1 / ruta al directorio local / directorio2
Este es un script que puede ayudar a diferenciar la carpeta local y la carpeta remota .:
#!/bin/bash
LOCALFOLDER=/var/www/tee
REMOTEFOLDER=$(ssh root@111.111.111.1 'ls -lA /hfs/tee'| grep -E '^total' | cut -d " " -f 2 > remotessh.txt)
COMMAND=$(ls -lA $LOCALFOLDER | grep -E '^total' | cut -d " " -f 2 > localssh.txt)
REM=$(cat remotessh.txt)
LOCAL=$(cat localssh.txt)
echo $LOCAL
echo $REM
if [ $REM -eq $LOCAL ]
then
echo Directories are the same
else
echo Directories are differnt
fi
#diff localssh.txt remotessh.txt | grep -E '^total' | cut -d " " -f 2
http://myfedora.co.za/2012/04/diff-two-remote-file-systems/
diff <(/ usr / bin / ssh user1@192.168.122.1 'ls / opt / lib /') <(/ usr / bin / ssh user2@192.168.122.1 'ls / tmp /') | grep -i ">" | sed 's /> // g'
También puede intentar generalizar el enfoque creando una función bash, posiblemente en su ~ / .bashrc:
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
luego invocándolo con una construcción como:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
Al invocar diff con -s, esto también informará si los archivos son idénticos.
¡Salud! Jim
rsync -ani --delete / root@remotehost:/
pero la respuesta completa da más detalles.