Comment puis-je différer des fichiers / dossiers sur des machines à condition que la seule connectivité disponible soit ssh?
Comment puis-je différer des fichiers / dossiers sur des machines à condition que la seule connectivité disponible soit ssh?
Réponses:
Vous pouvez le faire avec la substitution de processus de Bash :
diff foo <(ssh myServer 'cat foo')
Ou, si les deux sont sur des serveurs distants:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
Enfin, j'ai trouvé une excellente solution: vimdiff
vimdiff /path/to/file scp://remotehost//path/to/file
merci à http://linux.spiney.org/remote_diff_with_vim_and_ssh voir aussi http://www.vim.org/scripts/script.php?script_id=1075 .
//
après remotehost
est important. Slash simple ne fonctionnera pas
vimdiff /path/to/file scp://username@remotehost//path/to/file
Voici une autre recette rapide et sale en ligne de commande. Contrairement à la réponse choisie, cela fonctionne dans les makefiles:
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
Utilisez scp pour amener les fichiers sur une machine commune et les y afficher?
Ou, si vous voulez simplement savoir si les fichiers sont différents ou non, hachez-les avec md5sum sur chaque machine.
Vous pourriez aussi regarder quelque chose comme SSHFS , mais je ne sais pas comment un algorithme comme diff fonctionne par-dessus.
rsync --dry-run
.
Une façon possible, si cela est possible sur votre système, consiste simplement à monter le système de fichiers distant avec sshfs .
Vous pouvez utiliser rsync
le mode de fonctionnement à sec, comme suggéré brièvement dans une autre réponse . Il répertorie tous les fichiers qui sont différents.
Pour cela, utilisez les rvnc
options ( r
= récursif, v
= verbeux, n
= exécution à sec, c
= somme de contrôle). En rsync
mode Pull ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), voici un exemple:
rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .
Rappelez - vous , cela ne fournit aucune information sur le fait que le fichier local ou distant est plus récent. Juste s'ils diffèrent.
Sur votre ordinateur local, faites une copie récursive du répertoire que vous voulez différencier. Par exemple:
cp -R dir replica
utilisez rsync pour répliquer le répertoire distant sur la copie locale:
rsync remote:/path/to/dir replica
utilisez diff pour trouver la différence entre le répertoire local et la réplique locale du répertoire distant:
diff dir replica
Voici comment je l'ai fait.
J'ai utilisé SFTP sur le serveur distant et entré mon nom d'utilisateur / pwd à l'invite. Ensuite, j'ai utilisé le répertoire créé dans le répertoire .gvfs de mon répertoire personnel dans la commande diff.
diff -r --brief / home / répertoire utilisateur / .gvfs / SFTP \ on \ freenas.local / chemin d'accès au répertoire / répertoire1 / chemin d'accès au répertoire local / répertoire2
C’est un script qui peut aider à différencier le dossier local et le dossier distant.:
#!/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'
Utilisez sshfs monté sur ssh. Ce ne sera pas si rapide, mais vous pouvez utiliser votre suite complète d'outils qui s'attendent à ce que tout se trouve sur un système de fichiers local. Une alternative est NFS sur un tunnel créé avec "ssh -w" (ou d'autres communications où ssh n'est pas la limitation).
Vous pouvez également essayer de généraliser l’approche en créant une fonction bash, éventuellement dans votre ~ / .bashrc:
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
puis en l'invoquant avec une construction comme:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
En appelant diff avec -s, cela indiquera également si les fichiers sont identiques.
À votre santé! Jim
rsync -ani --delete / root@remotehost:/
que la réponse complète donne plus de détails.