2012-02-22 10 views
240

मैं cp एक निर्देशिका चाहता हूं लेकिन मैं किसी भी मौजूदा फाइल को ओवरराइट नहीं करना चाहता हूं, भले ही वे प्रतिलिपि बनाई गई फाइलों से बड़े हों। और मैं इसे पूरी तरह से noniteractive करना चाहता हूँ क्योंकि यह एक crontab बैश स्क्रिप्ट का हिस्सा होगा। कोई विचार?लिनक्स कैसे कॉपी करें लेकिन ओवरराइट नहीं करें?

+0

https://unix.stackexchange.com/questions/67539/how-to-rsync-only-new-files – n611x007

उत्तर

358

man page से लिया:

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

उदाहरण:

cp -n myoldfile.txt mycopiedfile.txt 
+56

इसके बजाय का उपयोग 'rsync -a -v --ignore मौजूदा ' – Whitebird

+2

मैंने किया 'cp -n config.js.sample config.js' और यह –

+0

@ व्हाइटबर्ड का समाधान स्पॉट-ऑन भी काम करता है। –

42
cp -n 

क्या आप चाहते हैं। मैन पेज देखें।

30

लोग पाते हैं कि कि (RedHat पर मेरे जैसे) एक 'एन' विकल्प नहीं है के लिए आप cp -u का उपयोग कर सकते केवल स्रोत लिखें यदि स्रोत मौजूदा से नया है (या कोई मौजूदा नहीं है)।

[संपादित करें] टिप्पणियों में उल्लिखित अनुसार, यह पुरानी फाइलों को ओवरराइट करेगा, इसलिए ओपी वांछित नहीं है। उस के लिए छत का जवाब का प्रयोग करें।

+7

ओपी ने मौजूदा फाइलों को ओवरराइट नहीं करने के लिए कहा ** भले ही वे कॉपी की गई फाइलों से पुराने हैं **, इसलिए '-यू' वास्तव में उद्देश्य के अनुरूप नहीं है। –

+4

अच्छाई, आप बिल्कुल सही हैं। मुझे आश्चर्य है कि किसी को भी नोटिस करने में इतना समय लगा। –

21

यह RedHat पर काम करेगा:

false | cp -i source destination 2>/dev/null 

और अपडेट कर रहा है अधिलेखित नहीं कुछ अलग है।

+1

यहां 'झूठा' क्या करता है? –

+5

@ फ्रोजनफ्लम उत्तर '-i' प्रश्न। – ceving

+1

यह व्यस्त बॉक्स सीपी के लिए भी काम करता है। – hackel

47

rsync का उपयोग करने पर विचार करें।

rsync -a -v src dst 

लेकिन यह अगर अद्यतन फ़ाइलें अलग होगा।


टिप्पणियों के अनुसार

rsync -a -v --ignore-existing src dst 

पूरी तरह से मौजूदा फ़ाइलों अनदेखी करेंगे।

+6

मौजूदा फ़ाइलों को ओवरराइट होने से रोकने के लिए आप '--ignore-मौजूदा' ध्वज जोड़ना चाहते हैं। – cpburnz

+6

पूर्ण आदेश 'rsync -a -v --ignore-मौजूदा ' cp -u'above की बजाय वास्तव में सही उत्तर है। – Whitebird

+0

'cp' का उपयोग करने में क्या गलत है? – sudo

1

अल्पाइन linux: जवाब नीचे है केवल एकल फाइल के मामले के लिए: (और false | cp -i ... भी) अल्पाइन cp -n में काम नहीं कर तो समाधान मेरे मामले कि मैंने पाया में काम कर रहा है:

if [ ! -f env.js ]; then cp env.example.js env.js; fi 

ऊपर के उदाहरण में हम जांचते हैं कि env.js फ़ाइल मौजूद है और यदि नहीं, तो हम env.example.js को env.js के रूप में कॉपी करते हैं।

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