रिमोट डायरेक्टरी अद्यतित रखें

मुझे पूरी तरह से रिमोट डायरेक्टरी अद्यतित रखें सुविधा Winscp । दुर्भाग्य से, मुझे ओएस एक्स या लिनक्स में उपयोग करने के लिए कुछ भी आसान नहीं मिल रहा है। मुझे पता है कि एक ही चीज़ सैद्धांतिक रूप से changefiles या rsync , लेकिन मुझे हमेशा दोनों टूल्स की कमी और/या विरोधाभासी होने के लिए ट्यूटोरियल मिलते हैं।

मुझे मूल रूप से केवल एक उपकरण की आवश्यकता होती है जो ओएसएक्स या लिनक्स में काम करता है और स्थानीय निर्देशिका में परिवर्तन करते समय एक स्थानीय निर्देशिका के साथ एक दूरस्थ निर्देशिका सिंक (प्रतिबिंबित) रखता है।


अपडेट

समाधानों को देखते हुए, मैं एक जोड़े को देखता हूं जो एक दूरस्थ निर्देशिका को स्थानीय निर्देशिका मैन्युअल रूप से के साथ सिंक में रखने की सामान्य समस्या को हल करता है। मुझे पता है कि मैं हर मिनट rsync चलाने के लिए एक क्रॉन कार्य सेट कर सकता हूं, और यह वास्तविक समय के काफी करीब होना चाहिए।

यह सही समाधान नहीं है जिसे मैं खोज रहा था क्योंकि winscp यह और अधिक करता है: यह किसी निर्देशिका में फ़ाइल परिवर्तनों का पता लगाता है (जबकि मैं उन पर काम करता हूं) और फिर स्वचालित रूप से दूरस्थ सर्वर में परिवर्तन को धक्का देता है। मुझे पता है कि यह सबसे अच्छा समाधान नहीं है (कोई कोड भंडार नहीं है), लेकिन जब मैं इसे विकसित करता हूं तो यह मुझे सर्वर पर बहुत जल्दी परीक्षण कोड की अनुमति देता है। क्या कोई इस कार्यक्षमता को प्राप्त करने के लिए किसी अन्य आदेश के साथ rsync को गठबंधन करने के बारे में जानता है?

0
ro fr bn
getdropbox.com (स्कॉट द्वारा उल्लिखित) ड्रॉपबॉक्स की निर्देशिका और इसकी उपनिर्देशिकाओं में फ़ाइल परिवर्तनों का पता लगाएगा (जब आप उन पर काम करते हैं) और फिर स्वचालित रूप से उन सभी कंप्यूटरों में परिवर्तन को धक्का देंगे जो आपके ड्रॉपबॉक्स खाते से जुड़े हुए हैं।
जोड़ा लेखक jfs, स्रोत

15 उत्तर

आप एक एसएफटीपी क्लाइंट के रूप में Fetch का उपयोग भी कर सकते हैं, और उसके बाद सर्वर से फ़ाइलों को सीधे उसमें संपादित कर सकते हैं। एसएसएचएफएस भी हैं (वॉल्यूम के रूप में एसएसएच फ़ोल्डर को आरोहित करें) विकल्प। यह किस उत्तेजना के साथ है - क्या आप वाकई सिंक में रखे सामान चाहते हैं, या बस सर्वर पर फ़ाइलों को संपादित करना चाहते हैं?

ओएस एक्स की अपनी फाइल अधिसूचना प्रणाली है - यह स्पॉटलाइट पर आधारित है। मैंने किसी भी प्रोग्राम के बारे में नहीं सुना है जो चीजों को सिंक में रखने के लिए इसका उपयोग करता है, लेकिन यह निश्चित रूप से कल्पना योग्य है।

मैं व्यक्तिगत रूप से इस प्रकार की चीज़ के लिए आरसीएस का उपयोग करता हूं: - जब इसे मैन्युअल पहलू मिल जाता है, तो यह संभव है कि मैं इसे पहले परीक्षण किए बिना मेरी देव मशीन से परीक्षण सर्वर तक कुछ भी धक्का देना चाहता हूं। और यदि मैं विकास सर्वर पर काम कर रहा हूं, तो मैं ऊपर दिए गए विकल्पों में से एक का उपयोग करता हूं।

0
जोड़ा

आप हमेशा एसवीएन जैसे संस्करण नियंत्रण का उपयोग कर सकते हैं, इसलिए आपको बस इतना करना है कि सर्वर हर रात फ़ोल्डर में svn up चलाता है। यदि आप अपनी फ़ाइलों को सार्वजनिक रूप से साझा कर रहे हैं, तो यह सुरक्षा समस्याओं में चलता है, लेकिन यह काम करता है।

यदि आप लिनक्स का उपयोग कर रहे हैं, तो rsync का उपयोग करना सीखें। वास्तव में यह मुश्किल नहीं है क्योंकि आप-साथ प्रत्येक कमांड का परीक्षण कर सकते हैं। मैन पेज के माध्यम से जाएं, मूल प्रारूप जो आप चाहते हैं

rsync [विकल्प ...] एसआरसी ... [USER @] HOST: DEST

मेरे स्कूल सर्वर से मेरे घर बैकअप मशीन पर चलाया गया आदेश यह है

rsync -avi --delete ~ [email protected]:~/School/ >> BackupLog.txt

यह मेरी होम निर्देशिका (~) में सभी फाइलें लेता है और rsync के संग्रह मोड (-a), verbosly (-v) का उपयोग करता है, सभी परिवर्तनों को सूचीबद्ध करता है (-i), किसी भी फाइल को हटाने के दौरान जो अब मौजूद नहीं है (--delete) और मेरे रिमोट सर्वर पर फ़ोल्डर/घर/मुझे/स्कूल/में डालता है। यह सारी जानकारी प्रिंट करता है (कॉपी किया गया था, क्या हटाया गया था, आदि) फ़ाइल बैकअप LogLxt.txt में भी संलग्न है

मुझे पता है कि यह rsync का एक वायुमंडलीय दौरा है, लेकिन मुझे उम्मीद है कि यह मदद करता है।

0
जोड़ा

आप "रीयल-टाइम" कैसे सिंकिंग चाहते हैं? मैं अभी भी rsync की तरफ झुकता हूं क्योंकि आप जानते हैं कि यह दोनों प्लेटफार्मों (विंडोज़, सिगविन के साथ) पर पूरी तरह से समर्थित होने जा रहा है और आप इसे क्रॉन जॉब के माध्यम से चला सकते हैं। मेरे पास एक सुपर-सरल बैश फ़ाइल है जो मैं अपने सिस्टम पर चलाता हूं (यह नहीं पुरानी फ़ाइलों को हटाता है):

#!/bin/sh
rsync -avrz --progress --exclude-from .rsync_exclude_remote . [email protected]_computer:remote_dir    

# options
#   -a  archive
#   -v  verbose
#   -r  recursive
#   -z  compress 

आपका सबसे अच्छा शर्त इसे स्थापित करना और इसे आज़माएं। -n (--dry-run) विकल्प आपका मित्र है!

ध्यान रखें कि rsync (कम से कम साइगविन में) यूनिकोड फ़ाइल नामों का समर्थन नहीं करता है (16 अगस्त 2008 तक)।

0
जोड़ा
@ डीडब्ल्यूजे, शायद आप एसएसएच का उपयोग करने के लिए अपना जवाब बदलना चाहेंगे, क्योंकि आरएसआईएनसीसी कभी-कभी बंद बंदरगाह हो सकता है (एसएसएच से अधिक बार)।
जोड़ा लेखक einpoklum, स्रोत
यह किस तरह का सिंकिंग करेगा? दूरस्थ निर्देशिका को स्थानीय लोगों के साथ अद्यतित रखें? दूसरी तरह के आसपास? या यह दोनों दिशाओं को सिंक करेगा और नवीनतम बनाएगा?
जोड़ा लेखक Chris Smith, स्रोत
क्या यह द्वि-दिशात्मक है?
जोड़ा लेखक ThorSummoner, स्रोत
असल में, -a का अर्थ है -r man rsync देखें।
जोड़ा लेखक Anton Rudeshko, स्रोत

lsyncd seems to be the perfect solution. it combines inotify (kernel builtin function which watches for file changes in a directory trees) and rsync (cross platform file-syncing-tool).

lsyncd -rsyncssh /home remotehost.org backup-home/

जिथूब से उद्धरण:

Lsyncd एक स्थानीय निर्देशिका पेड़ घटना मॉनिटर इंटरफेस (inotify या fsevents) देखता है। यह कुछ सेकंड के लिए घटनाओं को जोड़ता है और जोड़ता है और फिर परिवर्तनों को सिंक्रनाइज़ करने के लिए एक (या अधिक) प्रक्रिया (एसएस) उत्पन्न करता है। डिफ़ॉल्ट रूप से यह rsync है। इस प्रकार Lsyncd एक हल्के वजन वाले लाइव दर्पण समाधान है जो स्थापित करने के लिए अपेक्षाकृत आसान है, नई फाइल सिस्टम या ब्लॉकडेविसेस की आवश्यकता नहीं है और स्थानीय फाइल सिस्टम प्रदर्शन में बाधा नहीं डालती है।

0
जोड़ा
क्या होता है यदि परिवर्तन तब होता है जब आपका कंप्यूटर रिमोट से कनेक्ट नहीं होता है? क्या lsyncd बाद में उन परिवर्तनों का रिकॉर्ड रखेगा?
जोड़ा लेखक einpoklum, स्रोत
यह बेहतर है, यह केवल खोजे गए परिवर्तनों पर फ़ाइलों को सिंक करेगा।
जोड़ा लेखक FaceBro, स्रोत
ऐसा लगता है कि मैं कुछ हफ्ते पहले क्या देख रहा था !! मैंने एकजुट करने की कोशिश की, कुछ वसा फ़ाइल साझाकरण सर्वर, sshfs: सभी अच्छे नहीं थे। IMHO rsync इस कार्य को देखने के लायक नहीं है (जब तक कि हम इसे अंतर्निहित या समकक्ष के साथ कॉन्फ़िगर करने में समय बिताना नहीं चाहते) ... lsyncd अब तक अच्छा दिखता है!
जोड़ा लेखक Shautieh, स्रोत

ऐसा लगता है कि आप शायद गलत समस्या को हल कर रहे हैं। यदि आप दूरस्थ कंप्यूटर पर फ़ाइलों को संपादित करने का प्रयास कर रहे हैं तो आप jedit के लिए ftp प्लगइन जैसे कुछ का उपयोग करने का प्रयास कर सकते हैं। http://plugins.jedit.org/plugins/?FTP यह सुनिश्चित करता है कि आपके पास है फ़ाइल का केवल एक संस्करण है, इसलिए यह कभी भी सिंक से बाहर नहीं हो सकता है।

0
जोड़ा

मैं इस छोटी रूबी-स्क्रिप्ट का उपयोग कर रहा हूं:

#!/usr/bin/env ruby
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Rsyncs 2Folders
#
# watchAndSync by Mike Mitterer, 2014 
# with credit to Brett Terpstra 
# and Carlo Zottmann 
# Found link on: http://brettterpstra.com/2011/03/07/watch-for-file-changes-and-refresh-your-browser-automatically/
#

trap("SIGINT") { exit }

if ARGV.length < 2
  puts "Usage: #{$0} watch_folder sync_folder"
  puts "Example: #{$0} web keepInSync"
  exit
end

dev_extension = 'dev'
filetypes = ['css','html','htm','less','js', 'dart']

watch_folder = ARGV[0]
sync_folder = ARGV[1]

puts "Watching #{watch_folder} and subfolders for changes in project files..."
puts "Syncing with #{sync_folder}..."

while true do
  files = []
  filetypes.each {|type|
    files += Dir.glob( File.join( watch_folder, "**", "*.#{type}" ) )
  }
  new_hash = files.collect {|f| [ f, File.stat(f).mtime.to_i ] }
  hash ||= new_hash
  diff_hash = new_hash - hash

  unless diff_hash.empty?
    hash = new_hash

    diff_hash.each do |df|
      puts "Detected change in #{df[0]}, syncing..."
      system("rsync -avzh #{watch_folder} #{sync_folder}")
    end
  end

  sleep 1
end

अपनी जरूरतों के लिए इसे अनुकूलित करें!

0
जोड़ा

rsync समाधान वास्तव में अच्छे हैं, खासकर यदि आप केवल एक ही तरीके से परिवर्तन को दबा रहे हैं। एक और बेहतरीन टूल unison है - यह दोनों दिशाओं में परिवर्तनों को सिंक्रनाइज़ करने का प्रयास करता है। यूनिसन होमपेज पर और पढ़ें।

0
जोड़ा

ड्रॉपबॉक्स ( http://www.getdropbox.com/ ) क्या आप चाहते हैं?

0
जोड़ा

एसवीएन के आईसीको के सुझाव का निर्माण, मैं वास्तव में सुझाव दूंगा कि यदि आप उपरोक्त या स्रोत नियंत्रण के समान हैं (और यदि आप नहीं हैं, तो आपको शायद शुरू करना चाहिए) आप कमांड डालकर उत्पादन वातावरण को अद्यतित रख सकते हैं पोस्ट-प्रतिबद्ध हुक में भंडार को अद्यतन करने के लिए।

आप इसे कैसे करना चाहते हैं, इसमें बहुत सारे चर हैं, लेकिन मैंने जो काम देखा है, उसके पास विकास या लाइव साइट एक कामकाजी प्रति है और उसके बाद पोस्ट-प्रतिबद्ध एक जबरन कमांड के साथ एक एसएस कुंजी का उपयोग करता है दूरस्थ साइट पर लॉग इन करें और कार्यशील प्रतिलिपि पर एक svn ट्रिगर करें। वैकल्पिक रूप से पोस्ट-प्रतिबद्ध हुक में आप रिमोट मशीन पर एक एसवीएन निर्यात, या एक स्थानीय (svn भंडार में) svn निर्यात और फिर रिमोट मशीन पर एक rsync ट्रिगर कर सकते हैं।

मैं उन चीजों के बारे में चिंतित हूं जो परिवर्तनों का पता लगाते हैं और उन्हें धक्का देते हैं, और मैं दौड़ की स्थिति के कारण हर मिनट दौड़ने वाली चीजों के बारे में भी चिंतित हूं। आपको कैसे पता चलेगा कि फ़ाइल को उसी क्षण में स्थानांतरित नहीं किया जा रहा है, जिसे लिखा जा रहा है? एक या दो बार भर में ठोकरें और आप लगातार समय-समय पर बचत या समानता से बचने वाले सभी समय-बचत लाभ खो देंगे।

0
जोड़ा

बदली गई फ़ाइलों का पता लगाने के लिए, आप fam (फ़ाइल परिवर्तन मॉनीटर) या इनोटिफी को आजमा सकते हैं। उत्तरार्द्ध लिनक्स-विशिष्ट है, fam में एक बीएसडी पोर्ट है जो ओएस एक्स पर काम कर सकता है। दोनों में उपयोगकर्ता स्पेस उपकरण हैं जिनका उपयोग स्क्रिप्ट में rsync के साथ किया जा सकता है।

0
जोड़ा

लिनक्स रिमोट एक्सेस के लिए आप क्या करना चाहते हैं 'एसएसएचएफएस' - एसएसएच फाइल सिस्टम का उपयोग करें।

# sshfs [email protected]:path/to/directory local_dir

फिर इसे नेटवर्क माउंट की तरह व्यवहार करें, जो यह है ...

A bit more detail, like how to set it up so you can do this as a regular user, on my blog

यदि आप WinSCP के असीमित व्यवहार चाहते हैं, तो आप आरएसआईएनसी को उस समय के साथ संयुक्त करना चाहेंगे जो इसे समय-समय पर निष्पादित करता है। काम के ऊपर क्रॉन समाधान, लेकिन winscp उपयोग के मामले के लिए overkill हो सकता है।

निम्न आदेश रिमोट होस्ट पर सामग्री को धक्का देने के लिए हर 5 सेकंड में rsync निष्पादित करेगा। सर्वर लोड को कम करने के लिए आप नींद के समय को समायोजित कर सकते हैं।

# while true; do rsync -avrz localdir [email protected]:path; sleep 5; done

यदि आपके पास बहुत बड़ी निर्देशिका संरचना है और मतदान के ऊपरी हिस्से को कम करने की आवश्यकता है, तो आप 'ढूंढ' का उपयोग कर सकते हैं:

# touch -d 01/01/1970 last; while true; do if [ "`find localdir -newer last -print -quit`" ]; then touch last; rsync -avrz localdir [email protected]:path; else echo -ne .; fi; sleep 5; done

और मैंने कहा कि क्रॉन अधिक हो सकता है? लेकिन कम से कम यह सब सिर्फ कमांड लाइन से किया जाता है, और इसे ctrl-c के माध्यम से रोका जा सकता है।

केबी

0
जोड़ा
उह, आपका ब्लॉग लिंक किसी नेटवर्क माउंट की तरह sshfs के इलाज पर किसी भी विवरण में नहीं जाता है।
जोड़ा लेखक ThorSummoner, स्रोत
एसएसएफएफएस को इस स्थिति में सीधे रिमोट होस्ट पर सिंक करने का क्या फायदा है? यह एक अनावश्यक ओवरहेड की तरह लगता है और मेरे अनुभव में sshfs कभी-कभी डिस्कनेक्ट कर सकता है।
जोड़ा लेखक nick fox, स्रोत

मेरे साथ भी वही दिक्कत है। मैं winscp प्यार करता था "दूरस्थ निर्देशिका अद्यतित रखें" कमांड। हालांकि, विंडोज़ से छुटकारा पाने के लिए मेरी तलाश में, मैंने winscp खो दिया। मैंने एक स्क्रिप्ट लिखी है जो वास्तविक समय के करीब कुछ करने के लिए fileschanged और rsync का उपयोग करती है।

कैसे इस्तेमाल करे:

  • Make sure you have fileschanged installed
  • Save this script in /usr/local/bin/livesync or somewhere reachable in your $PATH and make it executable
  • Use Nautilus to connect to the remote host (sftp or ftp)
  • Run this script by doing livesync SOURCE DEST
  • The DEST directory will be in /home/[username]/.gvfs/[path to ftp scp or whatever]

एक युगल डाउनसाइड्स:

  • यह winscp से धीमा है (मेरा अनुमान है क्योंकि यह नॉटिलस के माध्यम से जाता है और rsync के माध्यम से भी परिवर्तनों का पता लगाना पड़ता है)
  • यदि आप पहले से मौजूद नहीं हैं तो आपको गंतव्य निर्देशिका मैन्युअल रूप से बनाना होगा। तो यदि आप एक निर्देशिका जोड़ रहे हैं, तो यह DEST पक्ष पर निर्देशिका का पता लगाने और बनाने का नहीं होगा।
  • शायद अधिक मैंने अभी तक ध्यान नहीं दिया है
  • साथ ही, "rsyncThis" नामक एक एसआरसी निर्देशिका को सिंक्रनाइज़ करने का प्रयास न करें। यह शायद अच्छा नहीं होगा:)

#!/bin/sh

upload_files()
{
    if [ "$HOMEDIR" = "." ]
    then
        HOMEDIR=`pwd`
    fi

    while read  input
    do
        SYNCFILE=${input#$HOMEDIR}
        echo -n "Sync File: $SYNCFILE..."
        rsync -Cvz --temp-dir="$REMOTEDIR" "$HOMEDIR/$SYNCFILE" "$REMOTEDIR/$SYNCFILE" > /dev/null
        echo "Done."
    done
}


help()
{
    echo "Live rsync copy from one directory to another.  This will overwrite the existing files on DEST."
    echo "Usage: $0 SOURCE DEST"    
}


case "$1" in
  rsyncThis)
    HOMEDIR=$2
    REMOTEDIR=$3
    echo "HOMEDIR=$HOMEDIR"
    echo "REMOTEDIR=$REMOTEDIR"
    upload_files
    ;;

  help)
    help
    ;;

  *)
    if [ -n "$1" ] && [ -n "$2" ]
    then
        fileschanged -r "$1" | "$0" rsyncThis "$1" "$2"
    else
        help
    fi
    ;;
esac
0
जोड़ा

मेरे पास विंडोज के तहत एक ही सेटअप होता था, जो एक स्थानीय फ़ाइलट्री (संस्करण) और रिमोट सर्वर पर एक परीक्षण वातावरण है, जिसे मैंने रीयलटाइम में WinSCP के साथ प्रतिबिंबित रखा था। जब मैं मैक पर स्विच करता था तो मुझे खुश होने से पहले मुझे कुछ खोदना पड़ता था, लेकिन आखिर में इसका उपयोग समाप्त हो गया:

  • SmartSVN as my subversion client
  • Sublime Text 2 as my editor (already used it on Windows)
  • SFTP-plugin to ST2 which handles the uploading on save (sorry, can't post more than 2 links)

मैं वास्तव में इस सेटअप की सिफारिश कर सकता हूं, उम्मीद है कि यह मदद करता है!

0
जोड़ा

खैर, मुझे एक ही तरह की समस्या थी और इन दोनों का एक साथ उपयोग करना संभव है: rsync, एसएसएच पासवर्डलेस लॉगिन, वॉचडॉग (एक पायथन सिंक यूटिलिटी) और टर्मिनल नोटिफ़ायर (रूबी के साथ बनाई गई ओएस एक्स अधिसूचना उपयोगिता। आवश्यक नहीं है, लेकिन यह जानने में मदद करता है जब सिंक समाप्त हो गया है)।

  1. I created the key to Passwordless Login using this tutorial from Dreamhost wiki: http://cl.ly/MIw5

    1.1. When you finish, test if everything is ok? if you can't Passwordless Login, maybe you have to try afp mount. Dreamhost (where my site is) does not allow afp mount, but allows Passwordless Login. In terminal, type:

    ssh [email protected] You should login without passwords being asked :P

  2. I installed the Terminal Notifier from the Github page: http://cl.ly/MJ5x

    2.1. I used the Gem installer command. In Terminal, type:

    gem install terminal-notifier

    2.3. Test if the notification works.In Terminal, type:

    terminal-notifier -message "Starting sync"

  3. Create a sh script to test the rsync + notification. Save it anywhere you like, with the name you like. In this example, I'll call it ~/Scripts/sync.sh I used the ".sh extension, but I don't know if its needed.

    #!/bin/bash terminal-notifier -message "Starting sync" rsync -azP ~/Sites/folder/ [email protected]:site_folder/ terminal-notifier -message "Sync has finished"

    3.1. Remember to give execution permission to this sh script. In Terminal, type:

    sudo chmod 777 ~/Scripts/sync.sh 3.2. Run the script and verify if the messages are displayed correctly and the rsync actually sync your local folder with the remote folder.

  4. Finally, I downloaded and installed Watchdog from the Github page: http://cl.ly/MJfb

    4.1. First, I installed the libyaml dependency using Brew (there are lot's of help how to install Brew - like an "aptitude" for OS X). In Terminal, type:

    brew install libyaml

    4.2. Then, I used the "easy_install command". Go the folder of Watchdog, and type in Terminal:

    easy_install watchdog

  5. Now, everything is installed! Go the folder you want to be synced, change this code to your needs, and type in Terminal:

      watchmedo shell-command
          --patterns="*.php;*.txt;*.js;*.css" \
          --recursive \
          --command='~/Scripts/Sync.sh' \
          .
    

    It has to be EXACTLY this way, with the slashes and line breaks, so you'll have to copy these lines to a text editor, change the script, paste in terminal and press return.

    I tried without the line breaks, and it doesn't work!

    In my Mac, I always get an error, but it doesn't seem to affect anything:

    /Library/Python/2.7/site-packages/argh-0.22.0-py2.7.egg/argh/completion.py:84: UserWarning: Bash completion not available. Install argcomplete.

    Now, made some changes in a file inside the folder, and watch the magic!

0
जोड़ा

इसे स्वचालित करने के लिए उपयोगकर्ता watcher.py और rsync। यहां चरण-दर-चरण निर्देशों को पढ़ें:

http://kushellig.de/linux-file-auto-sync-directories/