rsync - रिपोर्ट केवल अपलोड की गई फ़ाइलें


14

मुझे rsync के साथ एक समस्या है: या तो यह मुझे निर्देशिकाओं में सभी फ़ाइलों को दिखाता है जो मैं rsyncing (यदि ध्वज का उपयोग कर रहा हूं -v) या कुछ भी नहीं (जब उपयोग नहीं कर रहा हूं -v)।

मैं उन फ़ाइलों को छोड़कर rsync को शांत करना चाहूंगा, जिन्हें वास्तव में दूर तक अपलोड किया जाना था। क्या इस तरह की रिपोर्टिंग को सक्रिय करने के लिए कोई झंडा है? मैं इसे प्रलेखन में नहीं पा सकता हूं

जवाबों:


11

हाँ, -iझंडे की जाँच करें । यह एक गुप्त प्रारूप में हर ऑपरेशन की रिपोर्ट देता है। प्रारूप की सटीक परिभाषा के लिए मैन पेज देखें।

दूरस्थ होस्ट को भेजी जाने वाली फ़ाइलों की सूची प्राप्त करने के लिए, आप निम्नलिखित का उपयोग कर सकते हैं:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

1
यह सभी फाइलों को फिर से रिपोर्ट कर रहा है, बदले हुए लोगों को नहीं।
खतरों के खिलाड़ी

@ नहीं, केवल दूरस्थ होस्ट को भेजी जाने वाली फ़ाइलें आउटपुट हैं (जैसे <fcstpoguax filename, जहां विभिन्न झंडे दिखाते हैं कि उन्हें अपडेट करने की आवश्यकता क्यों है)। यदि यह सभी फाइलों की रिपोर्ट करता है, तो आपके परीक्षण या आपके पर्यावरण के साथ कुछ गलत हो सकता है।
ओलिवर

मेरे विचार से आप सही है। मैंने मैनपेज पर एक नज़र डाली है और जैसा कि आप कहते हैं, इसका वर्णन किया गया है। लेकिन मेरा सिस्टम सभी फाइलों की रिपोर्ट कर रहा है। शायद दूर के साथ कुछ गड़बड़ हो ...
खतरों के खिलाड़ी

Mmmm। पास आना: रिपोर्टिंग स्ट्रिंग (सभी फ़ाइलों के लिए) है <f..T......। मैनपेज के अनुसार, यह टाइमस्टैम्प से संबंधित है।
खतरों के खिलाड़ी

1
का उपयोग कर grep -E '^[^.]|^$'सांख्यिकीय (या चेतावनियों, त्रुटियों, ...) लाइनों के माध्यम से, केवल एक उबाऊ के साथ शुरू होने वाली उबाऊ लाइनों को हटाने देगा ...
फ्रैंक नॉक

10

एक एकल के साथ rsync -vवास्तव में केवल स्थानांतरित फ़ाइलों को प्रिंट करता है। अगर आपको हर बार पूरी सूची मिल रही है, तो इसका मतलब है कि डिफ़ॉल्ट rsync src / dest तुलना एल्गोरिथ्म, जो संशोधन समय + आकार पर आधारित है, आपके मामले के लिए उपयुक्त नहीं है। आप -c( --checksum) ध्वज को जोड़ सकते हैं जो rsync को चेकसमिंग द्वारा फाइलों की तुलना करता है। ध्यान दें कि यह स्पष्ट रूप से कुछ I / O ओवरहेड को लगाता है।

थोड़ा संबंधित यह तथ्य है कि यदि आप --info=flistइसके बजाय उपयोग करते हैं -vतो आपको फ़ाइलों का अधिक छंटनी वाला आउटपुट मिलता है (आप मूल रूप से हेडर और विशिष्ट -vआउटपुट के पाद लेख को छोड़ देते हैं )।


1
--info=flistकेवल rsync> = 3.1 में उपलब्ध है, जो हर जगह उपलब्ध नहीं है। उदाहरण के लिए macOS को एक प्राचीन संस्करण 2.6.9 के साथ दिया गया है क्योंकि Rsync v3 unter GPL 3 है
chiborg

1
जबकि Apple GPL अफवाह सुपर-रसदार है, यह भी याद रखें कि एंटरप्राइज़ लिनक्स के पास एक विशाल समर्थन रेंज (14 वर्ष) है जहाँ संस्करण लॉक हैं (और शाखित हैं) प्रमाणन को संरक्षित करने और संगतता (एपीआई + एबी) को रिलीज़ के समर्थित जीवन पर। । यह वास्तव में ऐसा करने का एकमात्र व्यवहार्य तरीका है, और इसका दुष्प्रभाव यह है कि संस्करण संख्याएं पुरानी दिखाई देती हैं और नई सुविधाएँ एंटरप्राइज़ को लंबे समय की तरह प्रतीत नहीं हो सकती हैं।
user2066657

2

एक बात जो मेरे दिमाग में आती है, वह है वर्बोज़ लॉग फॉर्मेट का अधिक इस्तेमाल करना और जो आप पाना चाहते हैं उसे जागृत करना।

उदाहरण के लिए:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

यह बहुत मजबूत नहीं है, यह रिक्त स्थान के साथ अच्छी तरह से फ़ाइल-नाम नहीं संभालेंगे।


1

1. -iविकल्प का उपयोग करें

इन आइकनाइज़ किए गए (या: क्रिप्टिक) झंडे बदल दें। आप आउटपुट इस तरह दिखेगा:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. एक डॉट से शुरू होने वाली हर लाइन को grep करें।

अन्य सभी पंक्तियों को (लेगिबिलिटी के लिए भी रिक्त करें) पास करें:

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

और यहाँ हम :-) - बस डॉक्टर ने क्या आदेश दिया:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

शिकार करने के बजाए डॉट्स से बचने> के लाभ के आंकड़े भी हैं, लेकिन संभावित त्रुटियों, चेतावनियों आदि से गुजरना ...

अंत में आँकड़े रखना एक व्यक्तिगत प्राथमिकता है। -h --statsयदि आपको ये पसंद नहीं है तो उपयोग न करें । मुझे लगता है कि आपकी प्रमुख रुचि सौ या हजारों अपरिवर्तित फाइलों को स्क्रॉल करने में नहीं है ...


0

मुझे नहीं लगता कि ऐसा करने के लिए कोई झंडा है, लेकिन अब हो सकता है। यहाँ था जिस तरह से मैंने किया:

rsync -vv [other options] | grep -v 'uptodate'

1
मेरा rsync (संस्करण 3.0.7) uptodateरिपोर्टिंग में शामिल नहीं होता है, इसलिए इसे फ़िल्टर करना संभव नहीं है।
खतरों के खिलाड़ी

मैं सही करना चाहता हूं, या कम से कम स्पष्ट करना चाहता हूं कि माइक ने ऊपर क्या पोस्ट किया था और क्या @ jeckyll2hide ने बताया था। मुझे लगता है कि मुद्दा यह नहीं है कि rsync-v अब "uptodate" स्ट्रिंग का उत्सर्जन नहीं करता है, बल्कि इसके लिए आपको rsync -vv का उपयोग करने की आवश्यकता है। ध्यान दें कि दो बनाम मैंने सिर्फ Ubuntu 14.04 पर rsync संस्करण 3.1.0 के साथ इस काम को सत्यापित किया है। माइक, क्या आप इसे दर्शाने के लिए अपनी पोस्ट अपडेट कर सकते हैं?
जॉन मार्क मिशेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.