पुनरावर्ती, गैर-अधिलेखित फाइल कॉपी?


21

मुझे एक निर्देशिका मिली है जिसमें कॉफ़ीस्क्रिप्ट / जावास्क्रिप्ट फ़ाइलों वाले अन्य फ़ोल्डरों का एक समूह है। मैं एक ही फ़ोल्डर संरचना ठीक के साथ एक नए फ़ोल्डर में CoffeeScript फ़ाइलों को संकलित करने में सक्षम हूं।

मैं जो करना चाहता हूं वह सभी * .js फ़ाइलों को स्रोत फ़ोल्डर में गंतव्य फ़ोल्डर के लिए पुनरावर्ती रूप से कॉपी करता है। मैं उन सभी फ़ाइलों को भी अधिलेखित नहीं करना चाहता जो पहले से ही गंतव्य फ़ोल्डर में मौजूद हैं। इसे पूरा करने का कोई विचार?

मैंने उपयोग करने की कोशिश की cp -n source/**.js desination/और cp -Rn source/**.js desination/एक और समान प्रश्न को देखने के बाद, लेकिन यह काम नहीं कर रहा है।

किसी भी विचार यह कैसे पूरा करने के लिए?


आप rsync में एक नज़र है?
बोनोब

@bonob मैं नहीं। मैंने इसे एक या दो बार उपयोग किया है, लेकिन केवल दूरस्थ रूप से फाइल प्राप्त करने के लिए।
AlbertEngelB

जवाबों:


25

आप rsync का उपयोग कर सकते हैं (यह स्थानीय प्रतिलिपि भी करता है)

rsync -r --ignore-existing --include=*/ --include=*.js --exclude=* source/ destination
  • -r निर्देशिका में पुन: प्राप्त करने के लिए,
  • --ignore-existing गंतव्य में मौजूदा फ़ाइलों को अनदेखा करने के लिए,
  • includeऔर excludeमतलब फिल्टर:, सभी निर्देशिकाओं शामिल सभी * .js फ़ाइलों, बाकी को बाहर शामिल हैं; पहले शामिल करने की आवश्यकता है, अन्यथा अंतिम बहिष्कृत निर्देशिका को भी बाहर कर देगा, इससे पहले कि उनकी सामग्री को स्कैन किया जाए।

अंत में, आप जोड़ सकते हैं -Pयदि आप प्रगति देखना चाहते हैं, --list-onlyयदि आप यह देखना चाहते हैं कि यह वास्तव में नकल के बिना क्या कॉपी करेगा, और -tयदि आप टाइमस्टैम्प को संरक्षित करना चाहते हैं।


यह संबंधित नहीं है, लेकिन मैंने हाल ही में rsync कमांड सीखा, जब मैंने एक विभाजन से दूसरे में 15 साल के दस्तावेज़ स्थानांतरित किए। विश्वास है कि मेरी फाइलें वहां थीं, मैंने फिर पुराने विभाजन को मिटा दिया और कुछ अन्य सामान वहां डाल दिया; मुझे बाद में एहसास हुआ कि मैंने सभी टाइमस्टैम्प खो दिए हैं, और -t फ्लैग की खोज की है। बस अपने संकट को साझा करना चाहता था: '(


हाहा, यह एक काम किया! rsyncस्पष्ट रूप से बम है।
अल्बर्टबेलबेल

3
हां यह है, मैं इसे मुश्किल से जानता हूं, लेकिन बस अपने सवाल का जवाब देने की कोशिश करके इसके बारे में बहुत कुछ सीखा है। यदि आपको भविष्य में और आगे जाने की आवश्यकता है, तो आप फ़ाइलों में जटिल फिल्टर को परिभाषित कर सकते हैं और उदाहरण के लिए उन्हें कमांड में कॉल कर सकते हैं। आपके पास प्रति-निर्देशिका फ़िल्टर भी हो सकते हैं, कॉपी करते समय डेटा संपीड़ित करते हैं, और यह केवल इसकी सतह को खरोंच कर रहा है!
बोनोब

7

यह भी cp का उपयोग करके प्राप्त करने योग्य है। यहाँ देखें:

sudo cp -vnpr /xxx/* /yyy

xxx = स्रोत

yyy = गंतव्य

v = क्रिया

एन = नो क्लोबेर (ओवरराइट नहीं)

p = अनुमतियाँ संरक्षित करें

r = पुनरावर्ती


5

मैन पेजों को देखकर ऐसा लगता है कि आप -nविकल्प चाहते हैं ।

-n, --no-clobber
   do not overwrite an existing file (overrides the previous -i option)

मैंने -n का उपयोग करने की कोशिश की है, हालांकि यह मुझे * .js फ़ाइलों द्वारा फ़िल्टर करने की अनुमति नहीं देता है।
AlbertEngelB

0

मेरे डिस्ट्रो में क्लोबर उपलब्ध नहीं है, इसलिए:

echo n | cp -vipr xxx yyy

xxx = स्रोत

yyy = गंतव्य

v = क्रिया

i = इंटरैक्टिव (अधिलेखित करने के लिए संकेत) | जिसके कारण कमांड को "इको एन |

p = अनुमतियाँ संरक्षित करें

r = पुनरावर्ती

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