rsync 'गैर-रिक्त निर्देशिका की त्रुटियों को हटा नहीं सकता, यहां तक ​​कि --force विकल्प के साथ भी


28

जब यह आदेश चल रहा हो:

$ sudo rsync -r --delete --force --checksum --exclude=uploads /data/prep/* /data/app/

मुझे निम्न आउटपुट मिल रहा है:

cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source
cannot delete non-empty directory: html/js/ckeditor/_samples
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor

पढ़ने से man rsyncयह मेरी धारणा थी कि --forceविकल्प इन गैर-रिक्त निर्देशिकाओं को हटाने के लिए rsync को बताएगा, जो वांछित परिणाम है।

रेफरी:

--force                 force deletion of dirs even if not empty

मैं गैर-रिक्त निर्देशिकाओं को हटाने के लिए कमांड को कैसे संशोधित कर सकता हूं?

मैं प्रासंगिक होने के मामले में Gentoo बेस सिस्टम रिलीज़ 2.0.3 पर rsync संस्करण 3.0.8 का उपयोग कर रहा हूं।

अद्यतन:sudo यह स्पष्ट करने के लिए कमांड में जोड़ा गया कि यह फ़ाइल अनुमति समस्या नहीं है।


गंतव्य क्या फाइलसिस्टम है? क्या मरम्मत की आवश्यकता में फाइलसिस्टम है?
मार्कस डाउनिंग

फाइल सिस्टम है ext3। यह संभव है कि फाइलसिस्टम जरूरत या मरम्मत में हो। मैं fsckअगले अवसर पर हूँ और परिणामों के साथ अद्यतन करूँगा ।
तोमरशैल

मैंने अभी-अभी fsckप्रणाली की है और यह मुद्दा अभी भी मौजूद है।
तोमरशैल

जवाबों:


39

क्या आपने जोड़ने की कोशिश की --delete-excluded?

यदि आप "दूरस्थ" पक्ष पर अपने अपवर्जित फ़ोल्डर में एक निर्देशिका rsync --deleteहटाते हैं, तो आपके "स्थानीय" साइट पर बहिष्कृत फ़ोल्डर को नहीं हटाएगा।


वहाँ एक फ़ोल्डर बुलाया uploadsगया था html/js/ckeditor/_source/plugins/uicolor/yui, html/js/ckeditor/_samplesऔर html/js/ckeditor/plugins/uicolor/yuiनिर्देशिका। आपकी सहायता के लिए धन्यवाद।
tommarshall

अगर उपयोग कर रहे हैं, --delete-excludedलेकिन आप अभी भी कुछ फ़ाइलों / निर्देशिकाओं को हटाने से बाहर करना चाहते हैं, तो आप इस फ़ाइलों / निर्देशिका को --filter 'protect some_dir/'उदाहरण के लिए रख सकते हैं :rsync -ac --delete --delete-excluded --exclude '*.html' --filter 'protect .git/' . /target/destination/
alexandre1985

6

यहाँ इस समस्या के संभावित स्रोत हैं:

(1) यह त्रुटि -b (--backup) विकल्प का परिणाम हो सकती है । यह विकल्प प्रत्येक हटाई गई फ़ाइल का बैकअप बनाएगा, इसके फ़ाइल नाम पर एक टिल्ड ( ~ ) जोड़कर । (यह मुझे भ्रमित करता है, क्योंकि फ़ाइल-नाम स्पष्ट रूप से एक बैकअप है, लेकिन निर्देशिका नाम नहीं है, क्योंकि आप टिल्ड नहीं देख सकते हैं।)

यह जाँचने के लिए कि क्या यह वही मामला है, अपने लक्ष्य निर्देशिका को सबसे गहरे स्तर पर पढ़ें, और जाँच करें कि क्या कोई टिल्ड (~) समाप्ति फ़ाइल है या नहीं। ध्यान दें कि ये टिल्ड-अपील्ड-फाइल्स-नाम तब कुछ सामान्य फ़ाइल ब्राउज़िंग सिस्टम में अदृश्य होते हैं, इसलिए आप उन्हें नहीं देख सकते हैं।

इस मामले को हल करने के लिए, --backup-dir = DIR विकल्प चुनें, उदाहरण के लिए --backup-dir = .rsync_aak।

(2) --exclude विकल्प के समान परिणाम हो सकते हैं। जो संभवतः आपके मामले में हो रहा है। पैटर्न प्रणाली शक्तिशाली है, लेकिन भ्रामक हो सकती है। उदाहरण के लिए यदि आप लिखते हैं --exclude = '* ~', तो यह सभी टिल्ड एंडिंग फाइलों को छोड़ देगा, जिसके परिणामस्वरूप ऊपर (1) जैसा होगा।

rsync मैन पेज से:

यदि पैटर्न / के साथ शुरू होता है, तो यह फाइलों के पदानुक्रम में एक विशेष स्थान के लिए लंगर डाला हुआ है, अन्यथा यह मार्गनाम के अंत के साथ मेल खाता है

Si यदि आप लिखते हैं --exclude = अपलोड करता है, तो यह आपकी फ़ाइलों के पेड़ के किसी भी स्तर पर "updloads" नामक सभी फ़ाइलों को बाहर कर देगा ।

जांचें कि क्या आपकी असमर्थ-निर्देशिका हटाने के अंदर "अपलोड" नाम की कोई फ़ाइल है।

समाधान "--exclude = uploads" को "--exclude = अपलोड /" में बदलना होगा


0

मेरे सेटअप में ((स्रोत पश्चिमी डिजिटल प्रकार fuseblk को लक्षित करने के लिए Ubuntu प्रारूप प्रकार ext4 है) इसके साथ काम करता है:

rsync -a -v --progress --modify-window=1 -c -b -i -s -m --del -vv --ignore-errors --chmod=ugo=rwx --delete --delete-excluded  --exclude='*~'  --exclude='.*' --backup-dir=.rsync_bak /home/test /media/user/usbHDD

2
इसका कौन सा हिस्सा वास्तव में समस्या को हल करता है?
माइकल हैम्पटन

0

के बजाय फ़िल्टर फ़ाइलों में नियमों का उपयोग करें --exclude। ये आपको "हठ" के रूप में बहिष्कृत चिह्नित करने की अनुमति देते हैं, जो आपको गैर-खाली निर्देशिकाओं को हटाने देगा जिनमें शामिल नहीं हैं फाइलें।

देखें इस उत्तर जानकारी के लिए।


-1

आपके द्वारा इसे हटाने के लिए एक निर्देशिका को खाली करना पड़ता है, फ़ाइल सिस्टम को सामान्य रूप से इसकी आवश्यकता होती है।

इसलिए सामान्य रूप से rsyncया rmपुनरावर्ती सभी सामग्रियों को पहले हटा देगा और उसके बाद ही खाली निर्देशिका को हटाएगा।

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

मेरा पहला अनुमान यह होगा कि उन निर्देशिका की कुछ फाइलें किसी अन्य उपयोगकर्ता के पास होती हैं, जैसे कि अपाचे या कोई उपयोगकर्ता नहीं।


धन्यवाद। निर्देशिका के भीतर फाइलें वास्तव में अपाचे समूह के भीतर एक उपयोगकर्ता के स्वामित्व में हैं, हालांकि मैंने इस कमांड को उस उपयोगकर्ता के रूप में चलाने का प्रयास किया है और उसे समान त्रुटियां मिली हैं।
tommarshall

इसके अलावा, अगर यह एक फ़ाइल अनुमति समस्या थी, तो मैं इस समस्या को हल करने के लिए 'sudo' के समान कमांड चलाने की अपेक्षा करूंगा, लेकिन यह मामला नहीं है। हालाँकि, अगर मुझसे गलती हुई है तो कृपया मुझे इस पर सुधार करें।
तोमरशैल

1
रूट के रूप में कमांड को चलाने से अधिकांश अनुमति के मुद्दों को दूर करना चाहिए, हाँ। (संभावित स्थान जहां वह अभी भी विफल रहेगा, एक नाम, एक अपरिवर्तनीय फ़ाइल दूसरे पर माउंट करने के लिए है) एक साधारण जांच के साथ ls -laयह देखने के लिए कि निर्देशिका अभी भी खाली क्यों नहीं है। lsattrअपरिवर्तनीय फ़ाइलों को प्रदर्शित करेगा।
HBruijn

अतिरिक्त जानकारी के लिए धन्यवाद, हालांकि lsattrसूचीबद्ध निर्देशिकाओं में से एक निम्न आउटपुट देता है: --------------- ./assets(नो आई फ्लैग), और फाइल एनएफएस माउंट पर नहीं है। क्या कोई अन्य कारण है जो आप सोच सकते हैं कि कमांड अब भी सूडो के साथ विफल क्यों होगा?
तोमरशैल

क्या वहां कोई सहानुभूति है, या सिर्फ असली फाइलें हैं?
मार्कस डाउनिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.