2012-03-31 10 views
32

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

यहाँ मेरी फाइल सिस्टम लग रहा है की तरह है:

uploads/ 
    1260000000/ 
    file_11_00.jpg 
    file_11_01.jpg 
    file_12_00.jpg 
    1270000000/ 
    file_11_00.jpg 
    file_11_01.jpg 
    file_12_00.jpg 
    1280000000/ 
    file_11_00.jpg 
    file_11_01.jpg 
    file_12_00.jpg 

मुझे क्या करना चाहते हैं केवल उन्हीं फ़ाइलों को "file_11_" उप-निर्देशिकाओं के साथ शुरू करते हैं पर चलने rsync है और मैं सिर्फ एक rsync काम चलाने के लिए सक्षम होना चाहता हूँ इन सभी फ़ाइलों को उपनिर्देशिका में सिंक करने के लिए।

rsync -nrv --include="**/file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

यह परिणाम 0 में फ़ाइलों को मेरी सूखी समय में स्थानांतरण के लिए चिह्नित किया जा रहा:

यहाँ आदेश है कि मैं कोशिश कर रहा हूँ है। मैंने कई अन्य संयोजनों को शामिल किया है - अंतर्निहित और बहिष्कृत बयानों, लेकिन या तो कोई परिणाम नहीं मिला है या सबकुछ मिला है जैसे विकल्प शामिल नहीं हैं या बहिष्कृत किए गए हैं।

किसी को भी यह पता है कि यह कैसे करें?

उत्तर

67

समस्या --exclude="*" (उदाहरण के लिए) को बाहर करने के 1260000000/ निर्देशिका, इसलिए rsync कभी नहीं कि निर्देशिका की सामग्री की जांच करता है, तो कभी नहीं देखती है कि निर्देशिका फ़ाइलें है कि आपके --include से मिलान किया गया है शामिल हैं का कहना है कि है।

मुझे लगता है कि आप क्या चाहते हैं के निकटतम बात यह है:

rsync -nrv --include="*/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

, या शायद इस (जो सभी निर्देशिका, और file_11*.jpg मिलान सभी फाइलें, लेकिन कोई अन्य फ़ाइलों को शामिल करेगा):

rsync -nrv --include="/[0-9][0-9][0-9]0000000/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

(इसी अवधारणा है, लेकिन निर्देशिका यह शामिल होंगे के बारे में ज्यादा pickier)।

+1

धन्यवाद! यही वही था जो मुझे चाहिए था। मेरा परिदृश्य वास्तव में आपके दूसरे उदाहरण में वर्णित रूप से कम या कम था, लेकिन मैंने सवाल को और अधिक सीधे आगे बढ़ाने के लिए अपना प्रश्न सरल बना दिया। –

+0

@ शेल्डन चांग: आपका स्वागत है! – ruakh

+5

उन फ़ाइलों की ** मूल ** निर्देशिकाओं सहित आप वास्तव में शामिल करना चाहते हैं (उदा।) - - शामिल = "* /" 'के महत्व पर ध्यान दें। – mabraham

7

खाली निर्देशिकाओं को छीनने के लिए ऊपर दिए गए अनुशंसित उत्तर में जोड़ें -m।

2

rsync शामिल पैटर्न उदाहरण को बाहर:

"*"   means everything 
"dir1"  transfers empty directory [dir1] 
"dir*"  transfers empty directories like: "dir1", "dir2", "dir3", etc... 
"file*"  transfers files whose names start with [file] 
"dir**"  transfers every path that starts with [dir] like "dir1/file.txt", "dir2/bar/ffaa.html", etc... 
"dir***" same as above 
"dir1/*" does nothing 
"dir1/**" does nothing 
"dir1/***" transfers [dir1] directory and all its contents like "dir1/file.txt", "dir1/fooo.sh", "dir1/fold/baar.py", etc... 

और अंतिम नोट कि बस न तारक कि रास्तों के मूल्यांकन के लिए शुरुआत में उपयोग किया जाता है पर निर्भर है, जैसे "**dir" (एकल फ़ोल्डरों या फ़ाइलों के लिए उनका उपयोग करना ठीक है लेकिन पथ नहीं) और ध्यान दें कि दो से अधिक तारांकन फ़ाइल नामों के लिए काम नहीं करते हैं।

+0

आपका उत्तर केवल एकमात्र है जो प्रयोग योग्य है क्योंकि आप सामान्य व्यवहार की व्याख्या करते हैं। अन्य उत्तर ओपी के अनुसार बहुत विशिष्ट हैं लेकिन प्रत्येक स्थिति को एक और समाधान की आवश्यकता है! इसने मेरी बहुत मदद की! –

+0

@ एएलबंडी मैं खुश हूँ! – TechJS

संबंधित मुद्दे