rsync गैर-रिक्त निर्देशिका को हटा नहीं सकता


10

अपने रिमोट बैकअप को सिंक करते समय मुझे त्रुटि मिलती है rsync cannot delete non-empty directory

मुझे इसका कारण पता है: मैंने कुछ फ़ाइलों को बाहर कर दिया है और जब rsync दूरस्थ निर्देशिका को हटाने की कोशिश करता है क्योंकि यह स्थानीय रूप से मौजूद नहीं है, तो यह खाली नहीं होने के बाद से नहीं हो सकता है। बहिष्करण के बिना निर्देशिका को खाली कर दिया जाएगा।

मुझे यह भी पता है कि मैं -डेली-बहिष्कृत का उपयोग करके समस्या से छुटकारा पा सकता हूं, लेकिन वह नहीं है जो मैं चाहता हूं।

मैं कुछ फ़ाइलों को अपलोड करना छोड़ना चाहूंगा (क्योंकि वे मेरी अपलोड गति के लिए बहुत बड़ी हैं), लेकिन मैं उन लोगों को रखना चाहता हूं जिन्हें मैंने कुछ समय पहले अपलोड किया है यदि वे स्थानीय रूप से मौजूद हैं । यदि वे स्थानीय रूप से मौजूद नहीं हैं, तो उन्हें हटा दिया जाना चाहिए। -डेली-अपवर्जित उन सभी को दूरस्थ तरफ हटा देगा।

इसका मतलब यह भी है कि अगर कोई निर्देशिका स्थानीय रूप से मौजूद नहीं है, तो उसे हटा दिया जाना चाहिए, भले ही उसमें बाहर की गई फाइलें हों।

क्या इसे पूरा करने के लिए rsync सेटअप करना संभव है?

जवाबों:


5

pसंशोधक का प्रयोग करें :

एक पी इंगित करता है कि एक नियम खराब है, जिसका अर्थ है कि यह उन निर्देशिकाओं में अनदेखा है जिन्हें हटा दिया जा रहा है। उदाहरण के लिए, -सी विकल्प के डिफ़ॉल्ट नियम जो "सीवीएस" और "* .ओ" जैसी चीजों को बाहर करते हैं, उन्हें खराब होने के रूप में चिह्नित किया जाता है, और स्रोत पर हटाए गए निर्देशिका को गंतव्य पर हटाए जाने से नहीं रोका जाएगा।

उदाहरण के लिए, मैं -Fविकल्प का उपयोग करता हूं , जो "rsync को प्रति-निर्देशिका देखने के लिए कहता है।। Hsarchy के माध्यम से छिड़कने वाली .sync-फ़िल्टर फ़ाइलें और स्थानांतरण में फ़ाइलों को फ़िल्टर करने के लिए उनके नियमों का उपयोग करें।"

मेरी .rsync-filterइन पंक्तियों को "ड्रापिंग्स" को फ़िल्टर करने के लिए इस तरह की लाइनें हैं कि मैक उनके पीछे छोड़ देते हैं:

-p .DS_Store
-p ._*

यदि excludeसिर्फ के बजाय का उपयोग कर -, एक अल्पविराम जोड़ें। उदाहरण के लिए :

exclude,p .DS_Store
exclude,p Thumbs.db

0

आप शामिल किए गए / शामिल पैटर्न के संशोधक का उपयोग कर सकते हैं, आपके द्वारा उपयोग किए गए पैटर्न पर ऐड-एस। यह rsync को बताता है कि केवल भेजने वाले पक्ष के लिए नियम को बाहर करें।

-n: केवल चेक करें कि डेस पर क्या डिलीट होगा, पैटर्न को डिलीट न करें: * .sh desc: / home / kg / tmp

उद्देश्य: desc पर .sh का फ़ाइल अंत हटाना चाहते हैं, लेकिन यदि आप ऐसा करते हैं, तो आप desc पर नहीं हटा सकते हैं: rsync -rvz --exclude * .sh --delete -n conkg kg@192.1681.1.202: /। घर / किग्रा / tmp

इसमें बदलाव करना चाहिए: जब आप टेस्ट करते हैं तो कृपया एन-एड करें: rsync -rvz --exclude-from del.txt -n --delete conkg kg@192.168.31.202: / home / kg / tmp वास्तविक डिलीट: rsync -rvz - बाहर से- del.txt --delete conkg kg@192.168.31.202: / home / kg / tmp cat del.txt -s *।

या: rsync -rvz --exclude -s * .sh --dede conkg kg@192.168.31.202: / होम / किग्रा / tmp


-2

बस rsync के '--max-size = xx' और '-delete' विकल्पों का उपयोग करें। यह सब कुछ स्वचालित रूप से करेगा और आपकी सभी आवश्यकताओं को पूरा करेगा।


यह कम से कम एक समाधान होगा। मैं mov, AVI और cr2 फ़ाइलों को पूरी तरह से छोड़ना चाहता हूं क्योंकि वे आम तौर पर बहुत बड़े होते हैं। लेकिन जिन्हें मैंने पहले ही तेज लाइन पर अपलोड कर दिया है, उन्हें कुछ समय पहले रखा जाना चाहिए। अब समस्या यह है कि सबसे बड़ी जेपीजी फाइलें सबसे छोटी सीआर 2 फाइलों से बड़ी हैं, इसलिए यह समाधान आदर्श नहीं है। मैं फ़ाइल नाम पर फ़िल्टर करने के लिए अपवर्जित सुविधा का उपयोग करूंगा।
marlar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.