2013-08-28 6 views
26

मैं rsync -like प्रोग्राम की तलाश में हूं जो दूरस्थ पक्ष पर किसी भी अनुपस्थित अभिभावक निर्देशिका बनाएगा।rsync - सभी गायब मूल निर्देशिका बनाएँ?

उदाहरण के लिए, अगर मैं एक सर्वर पर /top/a/b/c/d है और केवल /top/a दूरस्थ सर्वर पर मौजूद है, मैं दूरस्थ सर्वर से d प्रतिलिपि बनाना चाहते हैं और b और c निर्देशिका के रूप में अच्छी तरह से बनाया है।

आदेश: क्योंकि /tmp/a/b दूरस्थ सर्वर पर मौजूद नहीं है

rsync /top/a/b/c/d remote:/top/a/b/c 

काम नहीं करेगा। और यदि यह अस्तित्व में था तो फ़ाइल d पथ /top/a/b/c पर कॉपी हो जाएगी।

यह rsync--include और --exclude स्विच का उपयोग कर के साथ क्या करना संभव है, लेकिन यह बहुत शामिल है, उदा .:

rsync -v -r a dest:dir \ 
    --include 'a/b'  \ 
    --include 'a/b/c'  \ 
    --include 'a/b/c/d' \ 
    --include 'a/b/c/d/e' \ 
    --exclude 'a/*'  \ 
    --exclude 'a/b/*'  \ 
    --exclude 'a/b/c/*' \ 
    --exclude 'a/b/c/d/*' 

केवल a/b/c/d/edest:dir/a/b/c/d/e को कॉपी जाएगा, भले ही मध्यवर्ती निर्देशिका फ़ाइलों की है। (नोट - इसमें शामिल होने से पहले अवश्य होना चाहिए।)

क्या कोई अन्य विकल्प हैं?

+0

यह भी देखें [rsync: सर्वर पर लक्ष्य निर्देशिका बनाने के लिए मैं इसे कैसे कॉन्फ़िगर कर सकता हूं?] (Http://stackoverflow.com/questions/1636889/rsync-how-can-i-configure-it-to-create- लक्ष्य-निर्देशिका-ऑन-सर्वर) – mivk

+0

संभावित डुप्लिकेट [गंतव्य फ़ोल्डर बनाने के लिए rsync को कैसे बल दें] (https://stackoverflow.com/questions/9242135/how-to-force-rsync-to-create-destination-folder) – user

उत्तर

4

मैं सुझाव है कि आप अस्तित्व मैन्युअल लागू: अगर यह पहले से ही मौजूद नहीं है

ssh [email protected] mkdir -p /top/a/b/c 
rsync /top/a/b/c/d remote:/top/a/b/c 

इस लक्ष्य फ़ोल्डर बनाता है।

+2

हां - यह करने का एक तरीका है। लेकिन ऐसा लगता है कि मेरा उपयोग केस इतना उपयोगी परिदृश्य है कि इसके लिए कमांड होना चाहिए या rsync के लिए कुछ विकल्प होना चाहिए। – ErikR

+1

मुझे ऐसे किसी झंडे से अवगत नहीं है। – mnagel

13

आप के लिए

rsync -aR 
उदाहरण के लिए

देख जा सकता है:

rsync -a --relative /top/a/b/c/d remote:/ 

भी देखें other question में इस चाल।

+2

क्यों '-a' भी शामिल है? मुझे यकीन है कि इसकी आवश्यकता नहीं है। –

+1

@KennyEvitt '-a' रिकर्सिव (' -r') का उपयोग करता है लेकिन रिश्तेदार ('-R') नहीं, इसलिए कभी-कभी मालिक/परमिट (' -aR') को संरक्षित करने के लिए '-a' की आवश्यकता होती है। आप इस व्यवहार को देखने के लिए rsync को रूट (या कोई अन्य उपयोगकर्ता) के रूप में चलाने का परीक्षण कर सकते हैं। – dhaupin

+1

'--relative' प्रश्न में जैसे दूरस्थ पक्ष पर _create_ निर्देशिका घटकों को गायब नहीं करेगा। – juzzlin

8
rsync -aq --rsync-path='mkdir -p /tmp/imaginary/ && rsync' file [email protected]:/tmp/imaginary/ 

http://www.schwertly.com/2013/07/forcing-rsync-to-create-a-remote-path-using-rsync-path/ से, लेकिन कॉपी और पेस्ट नहीं है वहाँ से, अपने वाक्य रचना की हत्या कर रहा है।

यह आपको rsync निष्पादन योग्य के लिए पथ सेट अप करने के लिए मनमानी आदेश निष्पादित करने देता है।

1

--relative मेरे पास अलग-अलग सेटअप होने के बाद से मेरे लिए काम नहीं करता है। हो सकता है कि मैं सिर्फ समझा नहीं कैसे --relative काम करता है, लेकिन मैंने पाया कि

ssh remote mkdir -p /top/a/b/c 
rsync /top/a/b/c/d remote:/top/a/b/c 

समझने में आसान है और काम करता है।

+0

'--relative' आपके लिए काम नहीं करता है, क्योंकि इसका इसके साथ कुछ लेना देना नहीं है :) – juzzlin

+0

@juzzlin शायद मुझे समझ में नहीं आया कि कैसे - रिश्तेदार काम करता है। ;) – andrej

1

मैं एक बेहतर समाधान की तलाश में था, लेकिन जब आप मैन्युअल रूप से उन्हें बनाने के लिए बहुत अधिक उप-निर्देशिकाएं रखते हैं तो मेरा बेहतर अनुकूल लगता है।

सीधे शब्दों में --parents विकल्प

cp --parents /your/path/sub/dir/ /tmp/localcopy 
rsync [options] /tmp/localcopy/* remote:/destination/path/ 

cp --parents आप के लिए संरचना बनाएगा साथ एक मध्यवर्ती कदम के रूप में cp का उपयोग करें।

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