समस्या: rsync को Zsh-स्क्रिप्ट से कॉल करना, मैं rsync को एक्सटेंशन के एक निश्चित सेट वाली फ़ाइलों को बाहर करने के लिए कहना चाहता हूं। जिस तरह से मैं इसे अभी कर रहा हूं वह है:

rsync -r --exclude '*.bak' --exclude '*.save' --exclude '*.backup' --exclude '*.old' ... from_directory/* to_directory

यह लिखने में थकाऊ है और कमांड लाइन काफी लंबी हो जाती है। मैंने विकल्प के रूप में कोशिश की

# THIS DOES NOT WORK:
rsync -r --exclude '*.bak' --exclude '*.{save,backup,old,...}' from_directory/* to_directory

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

मैंने फ़ाइल में शामिल न किए जाने वाले सभी पैटर्न को लिखने और --exclude के बजाय --exclude-list का उपयोग करने पर भी विचार किया। यह काम करेगा, लेकिन मुझे यह समाधान पसंद नहीं है, क्योंकि मैं चाहता था कि मेरी स्क्रिप्ट स्वयं निहित हो, यानी फ़ाइल पैटर्न स्क्रिप्ट के अंदर दिखाई दे रहा है, अलग फ़ाइल में नहीं।

बेशक, HERE दस्तावेज़ का उपयोग करके, एक्सटेंशन युक्त अस्थायी फ़ाइल बनाने का समाधान हमेशा होता है:

cat <<<LIST >excluded.txt
*.bak
*.save
... etc
LIST
rsync -r --exclude-list excluded.txt ....
rm excluded.txt

लेकिन मुझे आश्चर्य है कि क्या अधिक सुरुचिपूर्ण समाधान है, या तो rsync विकल्पों के कुछ चतुर उपयोग से, या कुछ Zsh सुविधा द्वारा जो अस्थायी फ़ाइल को संभालना आसान बनाता है।

1
user1934428 30 जून 2016, 13:22

1 उत्तर

सबसे बढ़िया उत्तर

आपके द्वारा आजमाया गया विकल्प काम नहीं करता क्योंकि उद्धृत ब्रेसिज़ के लिए ब्रेस विस्तार (foo{a,b,c}barfooabar foobbar foocbar) नहीं किया जाता है।

इसके बजाय निम्नलिखित का प्रयास करें।

rsync -r --exclude='*'.{bak,save,backup,old} from_directory/* to_directory

चाल केवल * को उद्धृत करना है और इस तथ्य का उपयोग करना है कि --exclude विकल्प के मानों को एक स्थान के बजाय = से भी अलग किया जा सकता है। इस तरह zsh इसे एक शब्द के रूप में पहचानता है और

--exclude='*'.{bak,save,backup,old}

तक विस्तारित किया जाएगा

--exclude='*'.bak --exclude='*'.save --exclude='*'.backup --exclude='*'.old
2
Adaephon 30 जून 2016, 16:38