Question Comment diff sur ssh?


Comment puis-je différer des fichiers / dossiers sur des machines à condition que la seule connectivité disponible soit ssh?


166
2017-08-26 17:17


origine


Il y a une question relativement similaire à # 16661: Comment puis-je différencier deux serveurs RedHat Linux?. La réponse ici, pour enregistrer les clics, est rsync -ani --delete / root@remotehost:/ mais la réponse complète donne plus de détails. - Owen Blacker
Beaucoup de réponses ici, mais quelle approche est la plus rapide? - pl1nk
Personne n'utilise outils de diff visuel? - Dan Dascalescu


Réponses:


Vous pouvez le faire avec Bash's substitution de processus:

 diff foo <(ssh myServer 'cat foo')

Ou, si les deux sont sur des serveurs distants:

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')

142
2017-08-26 17:22



oui, quelque chose comme ça, mais pour les annuaires :) - Alexey Timanovsky
Comment voulez-vous dire pour les annuaires, vous pouvez toujours remplacer cat par ls - Kyle Brandt♦
Je soupçonne que 'pour les répertoires' signifie faire un diff récursif - Ian Clelland
J'ai trouvé que cette technique ne fonctionnait pas pour moi si mon hôte distant avait besoin d'un mot de passe. L'invite de mot de passe ne semblait pas bien fonctionner avec la redirection et n'a pas pu être complétée avec succès. Si vous utilisez des clés ssh, cela ne devrait pas poser de problème. - Adam Franco
C'est une excellente solution générale à de nombreux problèmes. Au lieu de 'cat foo', vous pouvez utiliser 'find / foo / bar -type f | en lisant le fichier; echo "**** $ file"; chat "$ fichier"; done 'et vous auriez une liste des noms de fichiers et du contenu du fichier à diff. - Paul Gear


Enfin, j'ai trouvé une excellente solution: vimdiff

vimdiff /path/to/file scp://remotehost//path/to/file

grâce à http://linux.spiney.org/remote_diff_with_vim_and_ssh voir également http://www.vim.org/scripts/script.php?script_id=1075 .


98
2018-05-15 08:55



vimdiff est gentil, merci! - Max Felker
Qu'en est-il des annuaires? :) - Perlnika
Voici un exemple: vimdiff .bash_profile scp: //vaibhavc@10.217.212.97//home/vaibhavc/.bash_profile - vaichidrewar
2 barres obliques // après le remotehost est important. Une seule barre ne fonctionnera pas - Lee Chee Kiam
Si vous avez un autre nom d'utilisateur sur l'hôte distant que votre hôte actuel, vous utiliserez vimdiff /path/to/file scp://username@remotehost//path/to/file - JaredC


Si vous voulez juste voir quels fichiers sont différents, plutôt qu’un diff des fichiers réels, alors vous pouvez utiliser rsync --dry-run


58
2017-09-04 11:14



rsync -n est la version courte. - volni
Parfait - si vous devez utiliser un autre port, utilisez rsync -e "ssh -p 2222" <SRC> <DST> - Samoth


Voici une autre recette en ligne de commande rapide et sale. Contrairement à la réponse choisie, cela fonctionne dans les makefiles:

ssh [login]@[host] "cat [remote file]" | diff - "[local file]"

15
2017-12-27 18:43



Si mon édition ne passe pas: cette méthode est supérieure à la réponse choisie car elle fonctionne avec les makefiles. - Chris Redford
@Steve Dickinson - qu'entendez-vous par "cela fonctionne dans les makefiles"? - Martin Vegter
C’est aussi une bonne solution si vous souffrez de l’allergie à Vim comme moi. :) J'ai créé un script bash qui compare le même fichier sur deux hôtes différents, ce qui est utile lors de la migration de services entre ordinateurs et lors de la comparaison de fichiers de configuration. Voir gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff - Janek


Utilisez scp pour transférer les fichiers sur une machine commune et les y afficher?

Ou, si vous voulez juste savoir si les fichiers sont différent ou non, hachez-les avec md5sum sur chaque machine.

Vous pouvez également examiner quelque chose comme SSHFS, mais je ne sais pas à quel point un algorithme comme diff fonctionne par dessus.


10
2017-08-26 17:19



Un moyen plus facile de voir si les fichiers sont différents ou non est rsync --dry-run. - Gerald Combs
J'avais oublié SSHFS. Cela a bien fonctionné pour moi ... - arod


Une solution possible, si cela est possible sur votre système, consiste simplement à monter le système de fichiers distant avec sshfs.


7
2017-08-26 17:19



diff est généralement une action ponctuelle, comme pour vérifier la différence de configuration. Monter un système de fichiers à chaque fois est possible, mais pas pratique. Je ferais mieux de goudron et scp. - Alexey Timanovsky


Vous pouvez utiliser rsync en 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 le rvnc options (r= récursif, v= verbeux, n= passage à sec, c= somme de contrôle). Avec rsync en mode traction (rsync [OPTION...] [USER@]HOST:SRC... [DEST]), un exemple est:

rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .

Rappelles toi, cela ne donne aucune information sur le fait que le fichier local ou distant est plus récent. Juste s'ils diffèrent.


3
2018-04-29 12:21





  • 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
    

2
2018-01-30 13:16