पुन: उपयोग rsync --dry- रन आउटपुट वास्तविक स्थानांतरण को गति देने के लिए बाद में


23

मैं आमतौर पर rsync -nएक वास्तविक करने से पहले करता हूं rsync। बात यह है, मैं दूसरे रन को स्वचालित कैसे कर सकता हूं ताकि इसके साथ उत्पन्न सूची का पुन: उपयोग किया जा सके --dry-run?

मेरा मतलब है, अगर मैं दौड़ता हूं rsync -nतो मुझे एक सिमुलेशन मिलता है कि मैं क्या rsyncकरूंगा, मेरा विचार उस आउटपुट को लेना होगा, इसे प्रोसेस करना होगा फिर किसी तरह rsyncकेवल --include-fromउस आउटपुट को बनाना होगा , इसलिए पूरी सूची की गणना केवल एक बार करनी होगी।

अगर यह भी समझ में नहीं आता है, तो कृपया, मुझे बताएं।

वैसे, मैं उपयोग करने के लिए करते हैं rsync -hva --progress --stats --delete --exclude-from "$EXCLUDEFILE"। यदि आपके पास यह सुझाव भी है कि आप किन विकल्पों का उपयोग करेंगे, तो कृपया मुझे बताएं। मैं एक बाहरी हार्ड ड्राइव की सामग्री की नकल करने की कोशिश कर रहा हूं (जिसमें केवल चित्र, वीडियो और दस्तावेज़ हैं) दूसरे बाहरी हार्ड ड्राइव पर।


आप --dry-runकमांड से आउटपुट को एक फ़ाइल (जैसे rsync --dry-run -avz SOURCE DEST > include.txt) में रीडायरेक्ट करने की कोशिश कर सकते हैं , जिसमें सभी लाइनें हटा दी जाती हैं जो कि शामिल नहीं हैं rsync --include-from include.txt
ThatGuy

वह आखिरी आज्ञा होनी चाहिए rsync --include-from include.txt --exclude=* SOURCE DEST। देखें stackoverflow.com/a/19296415/1765910 जानकारी के लिए।
ThatGuy

हां, यह विचार है, लेकिन मुझे नहीं पता कि वास्तव में ऐसा कैसे करना है (इसके अलावा मैं किसी से अनुमोदन प्राप्त करना चाहता हूं जो वास्तव में जानता है कि वह क्या कर रहा है)। मैं सिर्फ rsyncशेल स्क्रिप्ट्स / बैश से कुछ भी नहीं जानता हूं ...
मैनुअल

जवाबों:


18

सूखे रन के दौरान उत्पन्न फ़ाइल सूची को शामिल फ़ाइल के रूप में उपयोग करना निश्चित रूप से संभव है। आदर्श रूप से, हालांकि, ड्राई-रन आउटपुट के ऊपर और नीचे की अतिरिक्त लाइनें हटा दी जानी चाहिए।

उदाहरण आउटपुट:

sending incremental file list
[LIST OF FILES]

sent 226 bytes  received 34 bytes  520.00 bytes/sec
total size is 648,373,274  speedup is 2,493,743.36 (DRY RUN)

इन लाइनों को हटाने के लिए, rsyncआउटपुट को headऔर में पाइप करें tail। फिर, संसाधित आउटपुट को शामिल फ़ाइल में सहेजें:

rsync --dry-run -avz source/ destination/ | head --lines=-3 | tail --lines=+3 > include.txt

अंत में, rsyncजनरेट की गई फ़ाइल का उपयोग करने के लिए कहें (वांछित के रूप में अतिरिक्त विकल्प जोड़ते हुए):

rsync --include-from=include.txt --exclude=* source/ dest/


इसके साथ समस्या यह है कि यह उन फ़ाइलों के साथ सामना नहीं करता है जिन्हें हटाया जाना चाहिए। और क्या केवल फाइलों की सूची सुनिश्चित करने के लिए पर्याप्त tail/ headमजबूत तरीका है ?
मैनुअल

जोड़ा जा रहा है --deleteस्रोत निर्देशिका से हटा कारणों फ़ाइलों के रूप में अच्छी तरह से गंतव्य निर्देशिकाओं से हटाए जाने के लिए, कंप्यूटर पर कम से कम मैं इस पर कोशिश की। आप पूरी तरह से tail/ headभाग को छोड़ सकते हैं । rsyncफ़ाइल में फ़ाइल नाम के रूप में प्रत्येक पंक्ति की व्याख्या करता है और बस गैर-मौजूदा फ़ाइलों को अनदेखा करता है, इसलिए यदि आप अतिरिक्त लाइनें रखते हैं तो कुछ भी नहीं होगा (जब तक कि आपके पास "वृद्धिशील फ़ाइल सूची भेजना" नाम की फ़ाइलें न हों, आदि), जिस स्थिति में इन फ़ाइलों को भी कॉपी किया जाएगा)।
ThatGuy
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.