Kullanılabilir tek bağlantının ssh olması koşuluyla, dosyaları / klasörleri makinelere nasıl ayırabilirim?
Kullanılabilir tek bağlantının ssh olması koşuluyla, dosyaları / klasörleri makinelere nasıl ayırabilirim?
Yanıtlar:
Bash'in işlem değişimi ile yapabilirsiniz :
diff foo <(ssh myServer 'cat foo')
Veya, her ikisi de uzak sunuculardaysa:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
Sonunda harika bir çözüm buldum: vimdiff
vimdiff /path/to/file scp://remotehost//path/to/file
sayesinde http://linux.spiney.org/remote_diff_with_vim_and_ssh ayrıca bkz http://www.vim.org/scripts/script.php?script_id=1075 .
//
sonra remotehost
önemlidir. Tek eğik çizgi işe yaramaz
vimdiff /path/to/file scp://username@remotehost//path/to/file
İşte başka bir hızlı ve kirli komut satırı tarifi. Seçilen cevaptan farklı olarak, makefiles içinde çalışır:
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
Dosyaları ortak bir makineye getirmek ve orada dağıtmak için scp kullanın.
Sadece dosyaların bilmek istiyorum Ya da vardır , farklı ya da değil, her makinede md5sum ile karma.
SSHFS gibi bir şeye de bakabilirsiniz , ancak diff gibi bir algoritmanın bu konuda ne kadar iyi çalıştığını bilmiyorum.
rsync --dry-run
.
Bir şekilde, sisteminizde mümkünse, uzak dosya sistemini sshfs ile kolayca bağlamak olacaktır .
rsync
Kuru çalışma modunda, başka bir cevapta kısaca önerildiği gibi kullanabilirsiniz . Farklı olan dosyaları listeler.
Bunun için rvnc
seçenekleri kullanın ( r
= özyinelemeli, v
= ayrıntılı, n
= kuru çalışma, c
= sağlama toplamı). İle rsync
çekme modda ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), bir örneği aşağıda verilmektedir:
rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .
Unutmayın , bu yerel veya uzak dosyanın daha yeni olup olmadığına dair hiçbir bilgi sağlamaz. Sadece farklılarsa.
Yerel makinenizde, değiştirmek istediğiniz dizinin özyinelemeli bir kopyasını alın. Örneğin:
cp -R dir replica
uzak dizini yerel kopyaya kopyalamak için rsync kullanın:
rsync remote:/path/to/dir replica
Uzaktaki yerel dizini ve yerel dizini arasındaki farkı bulmak için diff kullanın:
diff dir replica
İşte nasıl yaptım.
Uzak sunucuya SFTP kullandım ve istendiğinde kullanıcı adımı / pwd'yi girdim. Daha sonra, diff komutunda, ev dizinimdeki .gvfs dizininde oluşturulan dizini kullandım.
diff -r - özet / home / user dir / .gvfs / SFTP \ on \ freenas.local / dir / dir1 yoluna / yerel dir / dir2 yoluna
Bu, yerel klasör ve uzak klasörün dağılmasına yardımcı olabilecek bir komut dosyasıdır:
#!/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 kullanıcısı1@192.168.122.1 'ls / opt / lib /') <(/ usr / bin / ssh kullanıcısı2@192.168.122.1 'ls / tmp /') | grep -i ">" | sed 's /> // g'
Ayrıca yaklaşımı genelleştirmeyi de deneyebilirsiniz, muhtemelen ~ / .bashrc dosyasında bir bash işlevi oluşturabilirsiniz:
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
daha sonra şöyle bir yapıyla onu çağırmak:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
Diff ile -s komutunu çağırmak, dosyaların aynı olup olmadığını bildirecektir.
Şerefe! Jim
rsync -ani --delete / root@remotehost:/
ancak tam cevap daha fazla ayrıntı verir.