venv/
शामिल करने से पहले बाहर रखा जाना चाहिए */
:
rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
सूक्ष्मता वह है जो rsync
प्रक्रियाओं को क्रम में रखता है और पहला मिलान नियम जीतता है। तो, यदि --include='*/'
पहले है --exclude='venv/'
, तो निर्देशिका venv/
को शामिल किया गया है --include='*/'
और बहिष्कृत नियम से परामर्श नहीं किया गया है।
क्या हम इसे सरल बना सकते हैं?
हमें क्यों --include='*/'
और --exclude='*'
क्या चाहिए ? --exclude=venv/ --include='*.py'
पर्याप्त क्यों नहीं है ?
डिफ़ॉल्ट फ़ाइलों / निर्देशिकाओं को शामिल करने के लिए है। तो, विचार करें:
rsync -avz --exclude='venv/' --include='*.py' source target
इसमें फ़ाइलों या निर्देशिकाओं के अलावा सब कुछ शामिल होगा venv/
। हालाँकि, आप केवल .py
फ़ाइलें चाहते हैं । इसका मतलब है कि हमें अन्य फ़ाइलों को स्पष्ट रूप से बाहर करना होगा --exclude='*'
।
--exclude='*'
शामिल नहीं दोनों फ़ाइलों और निर्देशिकाओं। इसलिए, यदि हम निर्दिष्ट करते हैं --exclude='*'
, तो सभी निर्देशिकाओं को बाहर कर दिया जाएगा और केवल उन .py
फ़ाइलों को जो रूट निर्देशिका में पाए जाएंगे। .py
उपनिर्देशिकाओं में फाइलें कभी नहीं मिलेंगी क्योंकि उन rsync
निर्देशिकाओं में नहीं दिखता है जिन्हें बाहर रखा गया है। इस प्रकार, यदि हमारे पास है, तो हमें --exclude='*'
यह --include='*/'
सुनिश्चित करने की आवश्यकता है कि सभी निर्देशिकाओं की सामग्री का पता लगाया जाए।
--include='*/'
?