Rsync, कुछ निर्देशिकाओं को छोड़कर केवल कुछ फ़ाइलों के प्रकार शामिल हैं


14

मैं केवल कुछ फ़ाइल प्रकारों (जैसे .py) को rsync करना चाहता हूं और मैं कुछ निर्देशिकाओं (जैसे venv) में फ़ाइलों को बाहर करना चाहता हूं ।

यही मैंने कोशिश की है:

rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

लेकिन यह काम नहीं करता है।

मैं क्या खो रहा हूँ?

मैंने इस सवाल के जवाब का भी पालन किया लेकिन इससे कोई फायदा नहीं हुआ।


आपको प्रारंभिक की आवश्यकता क्यों है --include='*/'?
चार्ली पार्कर

1
यदि मेरे पास पुनरावर्ती निर्देशिकाएँ हैं, जिन्हें मैं केवल एक प्रकार की फ़ाइल भेजना चाहता हूँ, तो कोई कमांड कैसे तैयार करता है। ऐसा लगता है कि यह केवल लक्ष्य निर्देशिका के लिए ही करता है क्योंकि शायद अंतिम बहिष्करण जो सब कुछ को बाहर करता है
चार्ली पार्कर

जवाबों:


17

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='*/'और --exclude='*'क्या चाहिए ? केवल --exclude=venv/ --include='*.py'काम क्यों नहीं करता है?
सेंटएयू

1
@CentAu मैंने सिर्फ उसी की चर्चा के साथ उत्तर को अद्यतन किया।
23:10 पर जॉन 1024

यदि मेरे पास पुनरावर्ती निर्देशिकाएँ हैं, जिन्हें मैं केवल एक प्रकार की फ़ाइल भेजना चाहता हूँ, तो कोई कमांड कैसे तैयार करता है। ऐसा लगता है कि यह केवल लक्ष्य निर्देशिका के लिए ही करता है क्योंकि शायद अंतिम बहिष्करण जो सब कुछ को बाहर करता है।
चार्ली पार्कर

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