Como difiro arquivos / pastas entre computadores, desde que a única conectividade disponível seja ssh?
Como difiro arquivos / pastas entre computadores, desde que a única conectividade disponível seja ssh?
Respostas:
Você pode fazer isso com a substituição do processo do Bash :
diff foo <(ssh myServer 'cat foo')
Ou, se ambos estiverem em servidores remotos:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
Finalmente encontrei uma ótima solução: vimdiff
vimdiff /path/to/file scp://remotehost//path/to/file
obrigado a http://linux.spiney.org/remote_diff_with_vim_and_ssh, veja também http://www.vim.org/scripts/script.php?script_id=1075 .
//
após o remotehost
é importante. Única barra não vai funcionar
vimdiff /path/to/file scp://username@remotehost//path/to/file
Aqui está outra receita rápida e suja da linha de comando. Diferente da resposta escolhida, ela funciona dentro de makefiles:
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
Use scp para trazer os arquivos para uma máquina comum e diferenciá-los lá?
Ou, se você quiser apenas saber se os arquivos são diferentes ou não, faça o hash com md5sum em cada máquina.
Você também pode procurar algo como SSHFS , mas não sei o desempenho de um algoritmo como o diff.
rsync --dry-run
.
Uma maneira, se for possível no seu sistema, seria simplesmente montar o sistema de arquivos remoto com sshfs .
Você pode usar rsync
no modo de execução a seco, conforme sugerido brevemente em outra resposta . Ele lista todos os arquivos que são diferentes.
Para isso, use as rvnc
opções ( r
= recursiva, v
= detalhada, n
= execução a seco, c
= soma de verificação). No rsync
modo pull ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), um exemplo é:
rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .
Lembre-se , isso não fornece informações sobre se o arquivo local ou remoto é mais recente. Apenas se eles diferem.
na sua máquina local, faça uma cópia recursiva do diretório que deseja diferenciar. Por exemplo:
cp -R dir replica
use o rsync para replicar o diretório remoto pela cópia local:
rsync remote:/path/to/dir replica
use diff para encontrar a diferença entre o diretório local e a réplica local do remoto:
diff dir replica
Aqui está como eu fiz isso.
Usei o SFTP no servidor remoto e digitei meu nome de usuário / senha quando solicitado. Então eu usei o diretório que foi criado no diretório .gvfs no meu diretório pessoal no comando diff.
diff -r --brief / home / usuário dir / .gvfs / SFTP \ on \ freenas.local / caminho para dir / dir1 / caminho para local dir / dir2
Este é um script que pode ajudar a diferenciar a pasta local e a pasta 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 usuário1@192.168.122.1 'ls / opt / lib /') <(/ usr / bin / ssh usuário2@192.168.122.1 'ls / tmp /') | grep -i ">" | sed 's /> // g'
Você também pode tentar generalizar a abordagem criando uma função bash, possivelmente no seu ~ / .bashrc:
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
invocando-o com uma construção como:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
Invocando diff com -s, isso também informa se os arquivos são idênticos.
Felicidades! Jim
rsync -ani --delete / root@remotehost:/
apenas a resposta completa, que fornece mais detalhes.