yeah, sesuatu seperti ini, tetapi untuk direktori :)
Alexey Timanovsky
Bagaimana maksud Anda untuk direktori, selalu bisa mengganti kucing dengan ls
Kyle Brandt
27
Saya menduga bahwa 'untuk direktori' berarti melakukan perbedaan rekursif
Ian Clelland
9
Saya menemukan bahwa teknik ini tidak berfungsi untuk saya jika host jarak jauh saya memerlukan kata sandi. Prompt kata sandi tampaknya tidak berfungsi dengan baik untuk pengalihan dan tidak dapat diselesaikan dengan sukses. Jika Anda menggunakan kunci ssh ini seharusnya tidak menjadi masalah.
Adam Franco
2
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 gema "**** $ file"; cat "$ file"; selesai 'dan Anda akan memiliki daftar nama file dan isi file berbeda.
Berikut ini sebuah contoh: vimdiff .bash_profile scp: //[email protected]//home/vaibhavc/.bash_profile
vaichidrewar
4
2 garis miring //setelah remotehostitu penting. Slash tunggal tidak akan berfungsi
Lee Chee Kiam
2
Jika Anda memiliki nama pengguna yang berbeda pada host jarak jauh dari host Anda saat ini, Anda akan menggunakanvimdiff /path/to/file scp://username@remotehost//path/to/file
JaredC
bagaimana Anda bisa melakukan ini dengan dua host jarak jauh dengan file kunci id_rsa @ JaredC?
Manatax
61
Jika Anda hanya ingin melihat file apa yang berbeda, daripada berbeda dari file yang sebenarnya, maka Anda dapat menggunakannya rsync --dry-run
Jika edit saya tidak melalui: metode ini lebih unggul daripada jawaban yang dipilih karena ini bekerja dengan makefiles.
Chris Redford
@Steve Dickinson - apa yang Anda maksud dengan "itu bekerja di dalam makefiles"?
Martin Vegter
1
Ini juga solusi yang bagus jika Anda menderita alergi vim seperti saya. :) Saya membuat skrip bash yang membandingkan file yang sama pada dua host yang berbeda, berguna saat memigrasi layanan antar mesin dan membandingkan file konfigurasi. Lihat gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff
Janek
10
Gunakan scp untuk membawa file ke mesin umum dan diff mereka di sana?
Atau, jika Anda hanya ingin tahu apakah file tersebut berbeda atau tidak, hash dengan md5sum di setiap mesin.
Anda juga bisa melihat ke sesuatu seperti SSHFS , tapi saya tidak tahu seberapa baik algoritma seperti diff melakukan lebih dari itu.
diff biasanya merupakan tindakan satu-shot, seperti memeriksa perbedaan konfigurasi. Memasang sistem file setiap kali dimungkinkan, tetapi tidak nyaman. Lebih baik saya tar dan scp.
Alexey Timanovsky
3
Anda dapat menggunakan rsyncdalam mode lari kering, seperti yang disarankan secara singkat di jawaban lain . Ini mencantumkan file yang berbeda.
Untuk itu, gunakan rvncopsi ( r= rekursif, v= verbose, n= dry-run, c= checksum). Dengan rsyncdalam mode tarik ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]), contohnya adalah:
Saya menggunakan SFTP ke server jarak jauh dan memasukkan nama pengguna / sandi saya saat diminta. Kemudian saya menggunakan direktori yang dibuat di direktori .gvfs di direktori home saya di perintah diff.
diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / path untuk dir / dir1 / path ke dir / dir2 lokal
Gunakan sshfs yang dipasang di ssh. Tidak akan secepat itu, tetapi Anda dapat menggunakan perangkat lengkap yang mengharapkan semuanya berada pada sistem file lokal. Alternatifnya adalah NFS di atas terowongan yang dibuat dengan "ssh -w" (atau komunikasi lain di mana ssh bukan batasannya).
rsync -ani --delete / root@remotehost:/
tetapi jawaban lengkapnya memberikan lebih banyak detail.Jawaban:
Anda dapat melakukannya dengan substitusi proses Bash :
Atau, jika keduanya ada di server jarak jauh:
sumber
Akhirnya saya menemukan solusi hebat: vimdiff
terima kasih kepada http://linux.spiney.org/remote_diff_with_vim_and_ssh lihat juga http://www.vim.org/scripts/script.php?script_id=1075 .
sumber
//
setelahremotehost
itu penting. Slash tunggal tidak akan berfungsivimdiff /path/to/file scp://username@remotehost//path/to/file
Jika Anda hanya ingin melihat file apa yang berbeda, daripada berbeda dari file yang sebenarnya, maka Anda dapat menggunakannya
rsync --dry-run
sumber
Inilah resep baris perintah cepat dan kotor lainnya. Berbeda dengan jawaban yang dipilih, ia bekerja di dalam makefiles:
sumber
Gunakan scp untuk membawa file ke mesin umum dan diff mereka di sana?
Atau, jika Anda hanya ingin tahu apakah file tersebut berbeda atau tidak, hash dengan md5sum di setiap mesin.
Anda juga bisa melihat ke sesuatu seperti SSHFS , tapi saya tidak tahu seberapa baik algoritma seperti diff melakukan lebih dari itu.
sumber
rsync --dry-run
.Salah satu caranya, jika mungkin pada sistem Anda adalah dengan hanya me-mount sistem file jarak jauh dengan sshfs .
sumber
Anda dapat menggunakan
rsync
dalam mode lari kering, seperti yang disarankan secara singkat di jawaban lain . Ini mencantumkan file yang berbeda.Untuk itu, gunakan
rvnc
opsi (r
= rekursif,v
= verbose,n
= dry-run,c
= checksum). Denganrsync
dalam mode tarik (rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), contohnya adalah:Ingat , ini tidak memberikan info apakah file lokal atau jauh lebih baru. Hanya jika mereka berbeda.
sumber
pada mesin lokal Anda, buat salinan rekursif dari direktori yang ingin Anda bedakan. Misalnya:
gunakan rsync untuk mereplikasi direktori jarak jauh melalui salinan lokal:
gunakan diff untuk menemukan perbedaan antara direktori lokal dan replika lokal dari yang jauh:
sumber
Jika Anda memiliki sshfs dan perlu membedakan direktori:
sumber
Inilah cara saya melakukannya.
Saya menggunakan SFTP ke server jarak jauh dan memasukkan nama pengguna / sandi saya saat diminta. Kemudian saya menggunakan direktori yang dibuat di direktori .gvfs di direktori home saya di perintah diff.
diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / path untuk dir / dir1 / path ke dir / dir2 lokal
sumber
Ini adalah skrip yang dapat membantu membedakan folder lokal dan folder jauh .:
sumber
http://myfedora.co.za/2012/04/diff-two-remote-file-systems/
diff <(/ usr / bin / ssh [email protected] 'ls / opt / lib /') <(/ usr / bin / ssh [email protected] 'ls / tmp /') | grep -i ">" | sed 's /> // g'
sumber
Gunakan sshfs yang dipasang di ssh. Tidak akan secepat itu, tetapi Anda dapat menggunakan perangkat lengkap yang mengharapkan semuanya berada pada sistem file lokal. Alternatifnya adalah NFS di atas terowongan yang dibuat dengan "ssh -w" (atau komunikasi lain di mana ssh bukan batasannya).
sumber
Anda juga dapat mencoba menggeneralisasi pendekatan dengan membuat fungsi bash, mungkin di ~ / .bashrc Anda:
kemudian memohonnya dengan konstruk seperti:
Dengan menggunakan diff dengan -s, ini juga akan melaporkan jika file identik.
Tepuk tangan! Jim
sumber