गैर-पुनरावर्ती रूप से निर्देशिका सामग्री की प्रतिलिपि बनाना


8

मैं निर्देशिका की श्रृंखला की सामग्री को गैर दूरस्थ रूप से किसी अन्य दूरस्थ प्रणाली में कॉपी करने का प्रयास कर रहा हूं।

/dirA/dir1/file
/dirA/dir2/file
/dirA/dir3/file

dir1, dir2, और dir3 में कई निर्देशिकाएँ हैं जिन्हें मैं कॉपी नहीं करना चाहता। एक ही निर्देशिका संरचना को बनाए रखने के लिए दूरस्थ होस्ट / dirB पर कॉपी करें।

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

rsync /dirA/*/ host:/dirB/
rsync /dirA/   host:/dirB/

लेकिन वे ऐसा नहीं करते जो मैं चाहता हूं।

जवाबों:


20

rsync आपको उन पैटर्नों को निर्दिष्ट करने की अनुमति देता है जो फ़ाइलों और निर्देशिकाओं के समावेश या बहिष्करण को ट्रिगर करते हैं। मुझे लगता है कि आप कुछ इस तरह का उपयोग करना चाहते हैं:

rsync -a -f '- /*/*/' /dirA/ host:/dirB/

स्पष्टीकरण:

  • -aउसके अनुसार "प्रतीकात्मक लिंक, उपकरण, विशेषताएँ, अनुमतियां, मालिकाना हक़" आदि की पुनरावृत्ति और संरक्षण को सक्रिय करने वाले संग्रह मोड को ट्रिगर करता है man rsync
  • -fके लिए छोटा है --filter=, जो एक फ़ाइल-फ़िल्टरिंग नियम जोड़ता है।
    • पैटर्न सिंगल कोट्स के अंदर है ताकि शेल वाइल्डकार्ड का विस्तार न करे; दोहरे उद्धरण इस मामले में समान रूप से अच्छी तरह से काम करेंगे।
    • - इसका मतलब यह एक अपवर्जित पैटर्न है।
    • प्रमुख का /मतलब है कि पैटर्न को dirA/(rsync "ट्रांसफर-रूट") से शुरू करना चाहिए ।
    • */*पैटर्न का हिस्सा एक उपनिर्देशिका के अंदर कुछ भी संदर्भित करता है।
    • अनुगामी /निर्देशिका के बहिष्करण को सीमित करता है। एक उपनिर्देशिका के अंदर की फाइलें dirA/प्रभावित नहीं होती हैं।

इसलिए अंत में, rsync एक स्तर से अधिक नीचे कुछ भी नहीं कॉपी करता है (और दूसरे स्तर की निर्देशिका भी नहीं बनाता है)।


2
बहुत अच्छा! मैं -f '- /*/'केवल शीर्ष स्तर की फ़ाइलों तक सीमित करने के लिए उपयोग करने में सक्षम था । मुझे -f '- .*'डॉट फ़ाइलों को बाहर करने के लिए भी निर्दिष्ट करना था, क्योंकि मैं एक होम डायरेक्टरी को सिंक कर रहा था।
haridsv

5

ऊपर दिए गए समाधान (प्लीज स्टेंड द्वारा) ने किसी कारण से मेरे लिए काम नहीं किया। हालांकि यह काम किया:

rsync -avc --no-r ./source/* ./destination/

यह भी एक विकल्प है:

rsync -avc --exclude "/" ./source/ ./destination/


1

Rsync की "विशेषताओं" में से एक यह है कि कैसे निर्देशिकाओं को पार्स किया जाता है।

rsync /dirA/ host:/dirB/ और rsync /dirA host:/dirB सैद्धांतिक रूप से समकक्ष होना चाहिए।

जैसा कि पुनरावृत्ति को प्रोत्साहित नहीं करना चाहते हैं, आप बचना चाहते हैं -r, -aजो अन्य बातों के अलावा है -r

मैं अभी भी अनुसंधान के साथ काफी काम नहीं कर रहा हूं, लेकिन यह मेरा शुरुआती जवाब है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.