Bagaimana cara membedakan file / folder di mesin dengan ketentuan bahwa satu-satunya konektivitas yang tersedia adalah ssh?
Bagaimana cara membedakan file / folder di mesin dengan ketentuan bahwa satu-satunya konektivitas yang tersedia adalah ssh?
Jawaban:
Anda dapat melakukannya dengan substitusi proses Bash :
diff foo <(ssh myServer 'cat foo')
Atau, jika keduanya ada di server jarak jauh:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
Akhirnya saya menemukan solusi hebat: vimdiff
vimdiff /path/to/file scp://remotehost//path/to/file
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 .
//
setelah remotehost
itu penting. Slash tunggal tidak akan berfungsi
vimdiff /path/to/file scp://username@remotehost//path/to/file
Inilah resep baris perintah cepat dan kotor lainnya. Berbeda dengan jawaban yang dipilih, ia bekerja di dalam makefiles:
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
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.
rsync --dry-run
.
Salah satu caranya, jika mungkin pada sistem Anda adalah dengan hanya me-mount sistem file jarak jauh dengan sshfs .
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). 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 info apakah file lokal atau jauh lebih baru. Hanya jika mereka berbeda.
pada mesin lokal Anda, buat salinan rekursif dari direktori yang ingin Anda bedakan. Misalnya:
cp -R dir replica
gunakan rsync untuk mereplikasi direktori jarak jauh melalui salinan lokal:
rsync remote:/path/to/dir replica
gunakan diff untuk menemukan perbedaan antara direktori lokal dan replika lokal dari yang jauh:
diff dir replica
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
Ini adalah skrip yang dapat membantu membedakan folder lokal dan folder jauh .:
#!/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'
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).
Anda juga dapat mencoba menggeneralisasi pendekatan dengan membuat fungsi bash, mungkin di ~ / .bashrc Anda:
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
kemudian memohonnya dengan konstruk seperti:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
Dengan menggunakan diff dengan -s, ini juga akan melaporkan jika file identik.
Tepuk tangan! Jim
rsync -ani --delete / root@remotehost:/
tetapi jawaban lengkapnya memberikan lebih banyak detail.