मैं फ़ाइलों / फ़ोल्डरों को मशीनों में कैसे अलग कर सकता हूँ बशर्ते कि उपलब्ध एकमात्र कनेक्टिविटी ssh हो?
मैं फ़ाइलों / फ़ोल्डरों को मशीनों में कैसे अलग कर सकता हूँ बशर्ते कि उपलब्ध एकमात्र कनेक्टिविटी ssh हो?
जवाबों:
आप इसे बैश की प्रक्रिया प्रतिस्थापन के साथ कर सकते हैं :
diff foo <(ssh myServer 'cat foo')
या, यदि दोनों दूरस्थ सर्वर पर हैं:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
अंत में मुझे बहुत अच्छा समाधान मिला है: vimdiff
vimdiff /path/to/file scp://remotehost//path/to/file
http://linux.spiney.org/remote_diff_with_vim_and_ssh के लिए धन्यवाद http://www.vim.org/scripts/script.php?script_id=1075 भी देखें ।
//
के बाद remotehost
महत्वपूर्ण है। सिंगल स्लैश नहीं चलेगा
vimdiff /path/to/file scp://username@remotehost//path/to/file
यहाँ एक और त्वरित और गंदा कमांड लाइन नुस्खा है। चुने हुए उत्तर के विपरीत, यह मेकफाइल्स के अंदर काम करता है:
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
फ़ाइलों को एक आम मशीन में लाने के लिए और उन्हें वहां अलग करने के लिए scp का उपयोग करें?
या, यदि आप जानना चाहते हैं कि फाइलें अलग - अलग हैं या नहीं, तो उन्हें प्रत्येक मशीन पर md5sum के साथ हैश करें।
आप SSHFS जैसी किसी चीज़ पर भी गौर कर सकते हैं , लेकिन मुझे नहीं पता है कि अलग-अलग तरह का एल्गोरिथम कितना अच्छा प्रदर्शन करता है।
rsync --dry-run
।
एक तरह से, अगर यह आपके सिस्टम पर संभव है तो बस sshfs के साथ दूरस्थ फाइल सिस्टम को माउंट करना होगा ।
आप rsync
सूखे रन मोड में उपयोग कर सकते हैं , जैसा कि दूसरे उत्तर में संक्षेप में सुझाया गया है । यह किसी भी फाइल को सूचीबद्ध करता है जो अलग हैं।
उसके लिए, rvnc
विकल्पों ( r
= पुनरावर्ती, v
= क्रिया, n
= शुष्क-रन, c
= चेकसम) का उपयोग करें। साथ rsync
पुल मोड (में rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), एक उदाहरण है:
rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .
याद रखें , यह इस बारे में कोई जानकारी नहीं देता है कि स्थानीय या दूरस्थ फ़ाइल नया है या नहीं। बस अगर वे अलग हैं।
अपनी स्थानीय मशीन पर, उस निर्देशिका की पुनरावर्ती प्रतिलिपि बनाएँ जिसे आप अलग करना चाहते हैं। उदाहरण के लिए:
cp -R dir replica
स्थानीय निर्देशिका पर दूरस्थ निर्देशिका को दोहराने के लिए rsync का उपयोग करें:
rsync remote:/path/to/dir replica
स्थानीय निर्देशिका और दूरस्थ एक की स्थानीय प्रतिकृति के बीच अंतर जानने के लिए उपयोग करें:
diff dir replica
यहाँ देखें कि मैंने यह कैसे किया।
मैंने दूरस्थ सर्वर में SFTP का उपयोग किया और संकेत दिए जाने पर अपना उपयोगकर्ता नाम / pwd दर्ज किया। फिर मैंने उस dg का उपयोग किया जो .gvfs dir को मेरे होम डाइरेक्टरी में अलग कमांड में बनाया गया था।
diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / dir / dir1 / पथ के लिए स्थानीय dir / dir2
यह एक स्क्रिप्ट है जो स्थानीय फ़ोल्डर और दूरस्थ फ़ोल्डर को अलग करने में मदद कर सकती है।
#!/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'
आप भी अपने ~ / .bashrc में संभवतः बैश फ़ंक्शन बनाकर दृष्टिकोण को सामान्य बनाने का प्रयास कर सकते हैं।
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
फिर इसे एक निर्माण के साथ लागू करना जैसे:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
-S के साथ अलग होने से, यह भी रिपोर्ट करेगा कि क्या फाइलें समान हैं।
चीयर्स! जिम
rsync -ani --delete / root@remotehost:/
लेकिन पूर्ण उत्तर अधिक विवरण देता है।