2011-08-23 11 views
15

मैं एक पायथन स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो एक rsync स्थानांतरण की निगरानी करेगा, और प्रतिशत प्रगति का एक (मोटा) अनुमान प्रदान करेगा। मेरा पहला प्रयास के लिए, मैं एक rsync --progress आदेश को देखा और देखा कि यह इस तरह के रूप संदेशों प्रिंट:मॉनीटरिंग रुनक प्रोग्रेस

1614 100% 1.54MB/s 0:00:00 (xfer#5, to-check=4/10)

मैं इस तरह के संदेशों के लिए एक पार्सर लिखा था, और करने के लिए की जांच हिस्सा इस्तेमाल किया एक प्रतिशत प्रगति, यहाँ का उत्पादन करने, यह 60% पूरा होगा। इसलिए प्रतिशत पूर्णता पीछे की ओर कूद कर सकते हैं, होगा- कम करने के लिए प्रतीत नहीं होता

  • बड़े स्थानान्तरण में, करने के लिए की जांच अंश का "अंश":

    हालांकि, इस में दो खामियां हैं।

  • इस तरह का एक संदेश सभी फ़ाइलों के लिए मुद्रित नहीं है, जिसका अर्थ है कि प्रगति आगे बढ़ सकती है।

मैंने उपयोग के संदेशों के अन्य विकल्पों पर एक नज़र डाली है, लेकिन कुछ भी खोजने में कामयाब नहीं रहा है। क्या किसी के पास कोई विचार है?

अग्रिम धन्यवाद!

+3

मान कूदते हैं क्योंकि rsync डेटा को स्थानांतरित करना प्रारंभ करता है, जबकि यह अभी भी उस काम का मूल्यांकन कर रहा है जो इसे करना है। यह उतना ही अच्छा उपाय है जितना आप पाएंगे। – hop

+0

क्या इसे उस कार्य को पूर्व-मूल्यांकन करने का कोई तरीका नहीं है जिसे इसे करने की आवश्यकता है? - ड्राय-रन - स्टार्ट ऐसा करने की तरह प्रतीत होता है, दुर्भाग्यवश डेटा को स्थानांतरित करने के लिए उत्पन्न होने वाले मान सही नहीं हैं। – paulmdavies

+0

इसे बेकार जानकारी दिखाने के लिए, आप इसे धीमा क्यों करेंगे? – hop

उत्तर

0

स्थानांतरण पर पूर्ण नियंत्रण के लिए आपको अधिक निम्न-स्तरीय diff टूल का उपयोग करना चाहिए और निर्देशिका सूची और डेटा स्थानांतरण को प्रबंधित करना चाहिए।

librsync के आधार पर या तो कमांड लाइन rdiff या अजगर मॉड्यूल pysync

24

rsync के वर्तमान संस्करण (संपादन 3.1.2 के समय) है एक विकल्प --info=progress2 जो आप पूरी की प्रगति दिखाएगा है व्यक्तिगत फ़ाइलों के बजाय स्थानांतरण।

the man page से:

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

तो, आपके सिस्टम पर यदि संभव हो तो आप एक मौजूदा संस्करण है जो कि विकल्प होता है करने के लिए rsync उन्नयन कर सकते हैं।

+0

सुनने के लिए बहुत अच्छी बात है! धन्यवाद! – Avio

+0

अगर मैं केवल MinGW पर rsync संकलित कर सकता हूं:/ – msiemens

+0

वृद्धिशील बैकअप सही प्रगति पट्टी नहीं दिखाता – LOKESH

6

आप के साथ वृद्धिशील प्रत्यावर्तन निष्क्रिय कर सकते हैं तर्क --no-inc-recursive। rsync पूरी निर्देशिका संरचना का प्री-स्कैन करेगा, इसलिए यह जांचने के लिए फाइलों की कुल संख्या जानता है।

यह वास्तव में पुराना तरीका है जिसे इसे रिकर्स किया गया है। वृद्धिशील रिकर्सन, वर्तमान डिफ़ॉल्ट, गति के लिए जोड़ा गया था।

4

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

एक तरीका यह सुनिश्चित करना है कि --info=progress2 सभी निर्देशिकाओं को स्कैन करने के rsync मजबूर करने के लिए किया जाएगा प्रगति संकेत में नहीं कूद वापस करता है (एक संवर्द्धित पुनरावर्ती स्कैन करने की अपनी डिफ़ॉल्ट व्यवहार के बजाय) रिकर्सिवली सिंक शुरू करने से पहले, --no-inc-recursive विकल्प भी प्रदान करके। ध्यान दें कि यह विकल्प rsync मेमोरी उपयोग और रन-टाइम भी बढ़ाएगा।

+0

यह मेरे लिए बहुत अच्छा काम करता है, विकल्प के स्पष्टीकरण के लिए धन्यवाद –

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