Vraag Hoe werkt diff over ssh?


Hoe kan ik verschillende bestanden / mappen op verschillende machines plaatsen, op voorwaarde dat de enige beschikbare connectiviteit ssh is?


166
2017-08-26 17:17


oorsprong


Er is een relatief vergelijkbare vraag bij # 16661: Hoe kan ik twee RedHat Linux-servers van elkaar onderscheiden?. Het antwoord daar op, om de kliks op te slaan, is rsync -ani --delete / root@remotehost:/ maar het volledige antwoord geeft meer details. - Owen Blacker
Heel veel antwoorden hier, maar welke aanpak is sneller? - pl1nk
Niemand gebruikt visuele diff-hulpmiddelen? - Dan Dascalescu


antwoorden:


Je kunt het doen met Bash's procesvervanging:

 diff foo <(ssh myServer 'cat foo')

Of, als beide op externe servers staan:

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

142
2017-08-26 17:22



ja, zoiets als dit, maar voor mappen :) - Alexey Timanovsky
Hoe bedoelt u voor directory's, zou u kat altijd kunnen vervangen door ls - Kyle Brandt♦
Ik vermoed dat 'voor mappen' betekent dat je een recursieve diff doet - Ian Clelland
Ik ontdekte dat deze techniek niet werkte voor mij als mijn externe host een wachtwoord nodig had. De wachtwoordprompt leek niet goed te werken met de omleiding en kon niet met succes worden voltooid. Als je ssh-sleutels gebruikt, zou dit geen probleem moeten zijn. - Adam Franco
Dit is een geweldige algemene oplossing voor veel problemen. In plaats van 'cat foo' zou je 'find / foo / bar -type f | tijdens het lezen van het bestand; echo "**** $ file"; cat "$ file"; done 'en je hebt een lijst met de bestandsnamen en bestandsinhoud om te diff. - Paul Gear


Eindelijk heb ik een geweldige oplossing gevonden: vimdiff

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

dankzij http://linux.spiney.org/remote_diff_with_vim_and_ssh zie ook http://www.vim.org/scripts/script.php?script_id=1075 .


98
2018-05-15 08:55



vimdiff is lief, bedankt! - Max Felker
Hoe zit het met mappen? :) - Perlnika
Hier is een voorbeeld: vimdiff .bash_profile scp: //vaibhavc@10.217.212.97//home/vaibhavc/.bash_profile - vaichidrewar
2 schuine strepen // na de remotehost is belangrijk. Enkele schuine streep werkt niet - Lee Chee Kiam
Als u een andere gebruikersnaam op de externe host hebt dan uw huidige host, zou u deze gebruiken vimdiff /path/to/file scp://username@remotehost//path/to/file - JaredC


Als u alleen wilt zien welke bestanden verschillend zijn, in plaats van een diff van de werkelijke bestanden, dan kunt u gebruiken rsync --dry-run


58
2017-09-04 11:14



rsync -n is de korte versie. - volni
Geweldig - als je een andere poort nodig hebt, gebruik dan rsync -e "ssh -p 2222" <SRC> <DST> - Samoth


Hier is nog een snel en vies commandoregelrecept. In tegenstelling tot het gekozen antwoord, werkt het in makefiles:

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

15
2017-12-27 18:43



Als mijn bewerking niet doorgaat: deze methode is superieur aan het gekozen antwoord omdat het werkt met makefiles. - Chris Redford
@Steve Dickinson - wat bedoel je met "het werkt in makefiles"? - Martin Vegter
Dit is ook een leuke oplossing als je last hebt van vim-allergie zoals ik. :) Ik heb een bash-script gemaakt dat hetzelfde bestand op twee verschillende hosts vergelijkt, handig bij het migreren van services tussen computers en het vergelijken van configuratiebestanden. Zien gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff - Janek


Gebruik scp om de bestanden naar een gewone machine te brengen en daar te diffunderen?

Of, als u alleen wilt weten of de bestanden zijn anders of niet, hash ze met md5sum op elke machine.

Je zou ook naar zoiets kunnen kijken SSHFS, maar ik weet niet hoe goed een algoritme zoals diff dat doet.


10
2017-08-26 17:19



Een eenvoudigere manier om te zien of de bestanden anders zijn of niet rsync --dry-run. - Gerald Combs
Ik was SSHFS vergeten. Dit werkte prima voor mij ... - arod


Eén manier, als het mogelijk is op je systeem zou zijn om simpelweg het externe bestandssysteem te mounten sshfs.


7
2017-08-26 17:19



diff is meestal eenmalige actie, zoals config-verschil controleren. Het is altijd mogelijk om bestandssysteem te koppelen, maar niet handig. Ik zou beter teer en scp zijn. - Alexey Timanovsky


Je kunt gebruiken rsync in droge run-modus, zoals kort voorgesteld in nog een antwoord. Het geeft alle bestanden weer die anders zijn.

Gebruik daarvoor de rvnc opties (r= Recursief, v= Verbose, n= droogloop, c= Controlesom). Met rsync in pull-modus (rsync [OPTION...] [USER@]HOST:SRC... [DEST]), een voorbeeld is:

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

Onthouden, dit geeft geen informatie over of het lokale of externe bestand nieuwer is. Alleen als ze verschillen.


3
2018-04-29 12:21





  • maak op uw lokale computer een recursieve kopie van de map die u wilt bekijken. Bijvoorbeeld:

    cp -R dir replica
    
  • gebruik rsync om de externe map te kopiëren over de lokale kopie:

     rsync remote:/path/to/dir replica
    
  • gebruik diff om het verschil te vinden tussen de lokale map en de lokale replica van de externe map:

    diff dir replica
    

2
2018-01-30 13:16





Als je sshf's hebt en diff directories nodig hebt:

mkdir remote_path
sshfs user@host:/path/ remote_path
diff -r path remote_path

2
2017-11-10 05:22





Hier is hoe ik het deed.

Ik heb SFTP op de externe server gebruikt en mijn gebruikersnaam / pwd ingevoerd toen ik hierom werd gevraagd. Vervolgens heb ik de dir gebruikt die is gemaakt in de .gvfs-directory in mijn thuismap in de opdracht diff.

diff -r - brief / home / gebruiker dir / .gvfs / SFTP \ on \ freenas.local / pad naar dir / dir1 / pad naar lokale map / dir2


1
2018-01-01 20:30