Pertanyaan Bagaimana cara melakukan diff over ssh?


Bagaimana cara diff file / folder di mesin disediakan hanya konektivitas yang tersedia adalah ssh?


166
2017-08-26 17:17




Ada pertanyaan yang relatif serupa di # 16661: Bagaimana saya bisa membedakan dua server RedHat Linux?. Jawabannya ada, untuk menyimpan klik, adalah rsync -ani --delete / root@remotehost:/ tapi jawaban lengkapnya memberi lebih banyak detail. - Owen Blacker
Cukup banyak jawaban di sini, tetapi pendekatan mana yang lebih cepat? - pl1nk
Tidak ada yang menggunakan alat diff visual? - Dan Dascalescu


Jawaban:


Anda dapat melakukannya dengan Bash substitusi proses:

 diff foo <(ssh myServer 'cat foo')

Atau, jika keduanya berada di server jarak jauh:

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

142
2017-08-26 17:22



ya, seperti ini, tapi untuk direktori :) - Alexey Timanovsky
Bagaimana maksud Anda untuk direktori, selalu dapat mengganti kucing dengan ls - Kyle Brandt♦
Saya menduga bahwa 'untuk direktori' berarti melakukan diff rekursif - Ian Clelland
Saya menemukan bahwa teknik ini tidak bekerja untuk saya jika host jarak jauh saya membutuhkan kata sandi. Perintah kata sandi tampaknya tidak berfungsi dengan baik dengan pengarahan ulang dan tidak dapat diselesaikan dengan sukses. Jika Anda menggunakan kunci ssh ini seharusnya tidak menjadi masalah. - Adam Franco
Ini adalah solusi umum yang bagus untuk banyak masalah. Alih-alih 'cat foo' Anda bisa menggunakan 'find / foo / bar -type f | saat membaca file; lakukan echo "**** $ file"; kucing "$ file"; selesai 'dan Anda akan memiliki daftar nama file dan isi file ke diff. - Paul Gear


Akhirnya saya menemukan solusi yang bagus: vimdiff

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

terimakasih untuk http://linux.spiney.org/remote_diff_with_vim_and_ssh Lihat juga http://www.vim.org/scripts/script.php?script_id=1075 .


98
2018-05-15 08:55



vimdiff manis, terima kasih! - Max Felker
Bagaimana dengan direktori? :) - Perlnika
Berikut ini contohnya: vimdiff .bash_profile scp: //vaibhavc@10.217.212.97//home/vaibhavc/.bash_profile - vaichidrewar
2 garis miring // setelah remotehost penting. Satu garis miring tidak akan berfungsi - Lee Chee Kiam
Jika Anda memiliki nama pengguna yang berbeda di host jarak jauh daripada host Anda saat ini, Anda akan menggunakannya vimdiff /path/to/file scp://username@remotehost//path/to/file - JaredC


Jika Anda hanya ingin melihat file apa yang berbeda, daripada diff dari file yang sebenarnya, maka Anda bisa menggunakannya rsync --dry-run


58
2017-09-04 11:14



rsync -n adalah versi singkatnya. - volni
Hebat - jika Anda perlu menggunakan port lain, gunakan rsync -e "ssh -p 2222" <SRC> <DST> - Samoth


Berikut resep baris perintah cepat dan kotor lainnya. Tidak seperti jawaban yang dipilih, ia bekerja di dalam makefile:

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

15
2017-12-27 18:43



Jika hasil edit saya tidak berhasil: metode ini lebih unggul daripada jawaban yang dipilih karena bekerja dengan makefile. - Chris Redford
@ Steve Dickinson - apa yang Anda maksud dengan "itu bekerja di dalam Makefiles"? - Martin Vegter
Ini juga merupakan solusi yang bagus jika Anda menderita alergi seperti saya. :) Saya membuat skrip bash yang membandingkan file yang sama pada dua host yang berbeda, berguna ketika memigrasi layanan antara mesin dan membandingkan file konfigurasi. Lihat gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff - Janek


Gunakan scp untuk membawa file ke mesin umum dan membedakannya di sana?

Atau, jika Anda hanya ingin tahu apakah file adalah berbeda atau tidak, hash mereka dengan md5sum pada setiap mesin.

Anda juga bisa melihat sesuatu seperti SSHFS, tapi saya tidak tahu seberapa baik algoritma seperti diff melakukan lebih dari itu.


10
2017-08-26 17:19



Cara yang lebih mudah untuk melihat apakah file berbeda atau tidak adalah rsync --dry-run. - Gerald Combs
Saya sudah lupa tentang SSHFS. Ini berhasil baik untukku ... - arod


Salah satu cara, jika mungkin pada sistem Anda akan cukup me-mount sistem file remote dengan sshfs.


7
2017-08-26 17:19



diff biasanya tindakan satu-shot, seperti untuk memeriksa perbedaan konfigurasi. Mount filesystem setiap waktu dimungkinkan, tetapi tidak convinient. Saya lebih baik tar dan scp. - Alexey Timanovsky


Kamu bisa memakai rsync dalam mode dry run, seperti yang disarankan secara singkat jawaban lain. Ini daftar semua file yang berbeda.

Untuk itu, gunakan rvnc pilihan (r= rekursif, v= verbose, n= kering-lari, c= checksum). Dengan rsync dalam mode tarik (rsync [OPTION...] [USER@]HOST:SRC... [DEST]), contohnya adalah:

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

Ingat, ini tidak memberikan informasi apakah file lokal atau jauh lebih baru. Hanya jika mereka berbeda.


3
2018-04-29 12:21





  • pada mesin lokal Anda, buat salinan rekursif dari direktori yang ingin Anda diff. Contohnya:

    cp -R dir replica
    
  • gunakan rsync untuk mereplikasi direktori jauh di atas salinan lokal:

     rsync remote:/path/to/dir replica
    
  • gunakan diff untuk menemukan perbedaan antara direktori lokal dan replika lokal dari satu remote:

    diff dir replica
    

2
2018-01-30 13:16