2013-02-01 26 views
18

कुछ एक्सटेंशन (*। Sh) की फ़ाइलों को rsync करने का प्रयास कर रहा है, लेकिन नीचे दी गई बैश स्क्रिप्ट अभी भी सभी फ़ाइलों को स्थानांतरित करती है, क्यों?rsync - शामिल विकल्प अन्य फ़ाइलों को बाहर नहीं करता

 
from=/home/xxx 
rsync -zvr --include="*.sh" $from/* [email protected]$host:/home/tmp/ 

उत्तर

15

आप सभी एक --exclude जोड़ने की जरूरत है और यह आने के लिए के बाद --include

rsync -zvr --include="*.sh" --exclude="*" $from/* [email protected]$host:/home/tmp/ 
+0

रिकर्सन के बारे में अच्छा बिंदु, @ थाट। ओएस एक्स पर, ऐसा प्रतीत होता है कि बहिष्कारों को शामिल करना है (एस)। मैंने सोचा होगा कि ** ढूंढें। -नाम '\ *। sh' | rsync -zvr --include-from = - --exclude = '*' ... ** काम करेगा, लेकिन ऐसा नहीं है। – JohnQ

+3

जैसा कि नोट किया गया है @ थैट से उत्तर बेहतर है, क्योंकि आपको उपनिर्देशिका –

+0

शामिल करने के लिए - शामिल = "* /" की आवश्यकता है, मैंने कोशिश की और यह कोई डेटा स्थानांतरित नहीं करता है। मेरे बयान शामिल करने से पहले और बाद में बहिष्कृत करने का भी प्रयास किया और यह एक ही परिणाम उत्पन्न करता है। –

13

--include जिसके लिए फ़ाइलें हैं उन्हें नहीं --exclude करना चाहते है। चूंकि आपने भविष्य के तर्कों में किसी को भी शामिल नहीं किया है, इसलिए इसका कोई प्रभाव नहीं है। आप कर सकते हैं:

from=/home/xxx 
rsync -zvr --include="*.sh" --include="*/" --exclude="*" "$from" [email protected]$host:/home/tmp/ 

रिकर्सिवली सभी .sh फ़ाइलों की प्रतिलिपि करने के लिए

+2

यह करने का एक अच्छा तरीका है, - शामिल = "* /" अनिवार्य है – Labynocle

+6

मुझे लगता है कि बहिष्कार गलत जगह पर है; इसमें शामिल होने के बाद होना चाहिए। पहले मिलान पैटर्न पर रुपयेynyn कार्य करता है। – Hipponax43

+1

हिप्पोनैक्स 43 सही है: क्या आप अपना जवाब सही कर सकते हैं, क्योंकि मुझे और निश्चित रूप से अन्य उपयोगकर्ताओं को आपके गलत उत्तर का उपयोग करने का बुरा समय हो रहा है – Bob

2

, जोड़ने के लिए कम से कम मेरी मशीनों पर बात पर (अतिरिक्त --include निर्देशिका कि .sh फ़ाइलें हो सकता है को छोड़ नहीं करने के लिए) (FreeBSD और ओएस एक्स), यह काम नहीं करता:

rsync -aP --include=*/ --include=*.txt --exclude=* * /path/to/dest 

लेकिन यह करता है:

rsync -aP --include=*/ --include=*.txt --exclude=* . /path/to/dest 

Y es, वर्तमान निर्देशिका वाइल्डकार्डिंग को बाहर करने के लिए ओवरराइड लग रहा है।

5

मैं --exclude द्वारा समस्या को बदलने --exclude = * तय = *। *, मैं समझता हूँ कि * को बाहर जहां शामिल फ़ाइलें हैं फ़ोल्डर।