2008-08-12 19 views
34

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

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


अद्यतन

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

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

+0

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

उत्तर

15

"वास्तविक समय" आप सिंकिंग कैसे चाहते हैं? मैं अभी भी 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 तक)।

+2

वास्तव में, '-a' का अर्थ है' -r'। [मैन rsync] देखें (http://manpages.ubuntu.com/manpages/precise/en/man1/rsync.1.html#contenttoc12)। –

+1

क्या यह द्वि-दिशात्मक है? – ThorSummoner

+0

@dwj, शायद आप एसएसएच का उपयोग करने के लिए अपना जवाब बदलना चाहेंगे, क्योंकि आरएसआईएनसीसी कभी-कभी बंद बंदरगाह हो सकता है (एसएसएच से अधिक बार)। – einpoklum

1

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

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

rsync [विकल्प ...] है एसआरसी ... [USER @] होस्ट: DEST

आदेश मैं अपने स्कूल सर्वर से चलाने के मेरे घर के बैकअप के लिए मशीन है इस

rsync -avi --delete ~ मुझे @ homeserv: ~/स्कूल/>> BackupLog.txt

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

में भी जोड़ा गया है, मुझे पता है कि यह rsync का एक वायुमंडलीय दौरा है, लेकिन मुझे उम्मीद है कि इससे मदद मिलती है।

2

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

4

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

1

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

0

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

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

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

1

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

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

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

8

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

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

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

थोड़ा और विस्तार से, यह कैसे सेट अप ताकि आप आप WinSCP की अतुल्यकालिक व्यवहार चाहते हैं नियमित उपयोगकर्ता के रूप से कर सकते हैं जैसे, my blog

पर, आप rsync कुछ के साथ संयुक्त का उपयोग करना चाहेंगे जो समय-समय पर इसे निष्पादित करता है। काम के ऊपर क्रॉन समाधान, लेकिन 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 

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

केबी

+0

उह, आपका ब्लॉग लिंक किसी नेटवर्क माउंट की तरह sshfs के इलाज पर किसी भी विवरण में नहीं जाता है। – ThorSummoner

+0

एसएसएफएफएस को इस स्थिति में सीधे रिमोट होस्ट पर सिंक करने का क्या फायदा है? यह एक अनावश्यक ओवरहेड की तरह लगता है और मेरे अनुभव में sshfs कभी-कभी डिस्कनेक्ट कर सकता है। –

3

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

उपयोग कैसे करें:

  • सुनिश्चित करें कि आप स्थापित fileschanged गए हैं
  • सहेजें/usr/स्थानीय/bin/livesync में इस स्क्रिप्ट या अपने $ पथ में कहीं से पहुंचा जा सकता है और यह निष्पादन योग्य
  • उपयोग नॉटिलस दूरस्थ होस्ट (SFTP या ftp)
  • भागो स्रोत livesync कर DEST द्वारा इस स्क्रिप्ट से कनेक्ट करने के
  • DEST निर्देशिका में/Hom हो जाएगा । ई/[उपयोगकर्ता नाम]/gvfs/

एक युगल कमियां [पथ SCP या जो कुछ भी FTP के]:

  • यह 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 
1

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

  • SmartSVN मेरी तोड़फोड़ ग्राहक
  • Sublime Text 2 के रूप में मेरे संपादक के रूप में (पहले से ही विंडोज पर यह प्रयोग किया जाता)
  • SFTP-प्लगइन ST2 के लिए जो (क्षमा करें, अधिक से अधिक 2 लिंक पोस्ट नहीं कर सकते हैं) को बचाने पर अपलोड करने

मैं वास्तव में इस स्थापना की सिफारिश कर सकते संभालती है, आशा है कि यह मदद करता है!

0

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

1,1:

  1. मैं passwordless लॉग इन करने के लिए महत्वपूर्ण Dreamhost विकी है इस ट्यूटोरियल का उपयोग कर बनाया। जब आप समाप्त, परीक्षण करता है, तो सब कुछ ठीक है ... यदि आप लॉग इन passwordless नहीं कर सकते, हो सकता है आप एएफपी पर्वत की कोशिश करने के लिए है। Dreamhost (जहां मेरी साइट है) एएफपी पर्वत की अनुमति नहीं है, लेकिन passwordless लॉग इन कर सकते हैं। टर्मिनल में, प्रकार:

    ssh [email protected] आप साइन इन करना होगा पासवर्ड के बिना कहा जा रहा है: पी

  2. मैं Github पेज से टर्मिनल सूचक स्थापित: http://cl.ly/MJ5x

    2,1। मैंने जेम इंस्टॉलर कमांड का इस्तेमाल किया।

    gem install terminal-notifier

    2,3: टर्मिनल, प्रकार में। टेस्ट अगर अधिसूचना works.In टर्मिनल, टाइप करें:

    terminal-notifier -message "Starting sync"

  3. rsync + सूचना का परीक्षण करने के लिए एक श स्क्रिप्ट बनाएं। अपने पसंदीदा नाम के साथ इसे कहीं भी सहेजें। इस उदाहरण में, मैं इसे ~/स्क्रिप्ट/sync.sh मैं ".sh विस्तार इस्तेमाल किया फोन करता हूँ, लेकिन मैं अगर अपने की जरूरत नहीं जानता।

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

    3,1। देने के लिए याद रखें इस श स्क्रिप्ट के निष्पादन अनुमति टर्मिनल, प्रकार में:।।

    sudo chmod 777 ~/Scripts/sync.sh 3,2 अंत में स्क्रिप्ट चलाएं और संदेश सही ढंग से प्रदर्शित कर रहे हैं की पुष्टि करने और rsync वास्तव में रिमोट फ़ोल्डर के साथ अपने स्थानीय फ़ोल्डर समन्वयित

  4. । , मैं downl गीथब पेज से ओडेड और स्थापित वॉचडॉग: http://cl.ly/MJfb

    4.1। सबसे पहले, मैंने ब्रू का उपयोग करके libyaml निर्भरता स्थापित की है (ओएस एक्स के लिए "योग्यता" की तरह ब्रू को स्थापित करने में बहुत मदद है)।

    brew install libyaml

    4,2: टर्मिनल, प्रकार में। फिर, मैंने "easy_install कमांड" का उपयोग किया।निगरानी के फ़ोल्डर, और प्रकार जाओ टर्मिनल में:

    easy_install watchdog

  5. अब, सब कुछ स्थापित किया गया है! जाओ फ़ोल्डर आप चाहते हैं समन्वयित होने के लिए, परिवर्तन अपनी आवश्यकताओं के लिए इस कोड, और प्रकार टर्मिनल में:

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

    यह बिल्कुल इस तरह हो गया है, स्लैश और लाइन टूट के साथ है, तो आपको इन पंक्तियों को एक टेक्स्ट एडिटर में कॉपी करना होगा, स्क्रिप्ट बदलें, टर्मिनल में पेस्ट करें और रिटर्न दबाएं।

    मैंने लाइन ब्रेक के बिना कोशिश की, और यह काम नहीं करता है!

    मेरी मैक में, मैं हमेशा कोई त्रुटि मिलती है, लेकिन यह कुछ भी प्रभावित करने के लिए नहीं लगता है:

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

    अब, फ़ोल्डर के अंदर एक फ़ाइल में कुछ परिवर्तन किए, और जादू देखें!

38

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

GitHub से
lsyncd -rsyncssh /home remotehost.org backup-home/ 

उद्धरण:

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

+2

यह बेहतर है, यह केवल खोजे गए परिवर्तनों पर फ़ाइलों को सिंक करेगा। – FaceBro

+0

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

+2

क्या होता है यदि परिवर्तन तब होता है जब आपका कंप्यूटर रिमोट से कनेक्ट नहीं होता है? क्या lsyncd बाद में उन परिवर्तनों का रिकॉर्ड रखेगा? – einpoklum

0

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

#!/usr/bin/env ruby 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
# Rsyncs 2Folders 
# 
# watchAndSync by Mike Mitterer, 2014 <http://www.MikeMitterer.at> 
# with credit to Brett Terpstra <http://brettterpstra.com> 
# and Carlo Zottmann <https://github.com/carlo/haml-sass-file-watcher> 
# 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 

अपनी आवश्यकताओं के लिए यह अनुकूल!

संबंधित मुद्दे