मैं cp
एक निर्देशिका चाहता हूं लेकिन मैं किसी भी मौजूदा फाइल को ओवरराइट नहीं करना चाहता हूं, भले ही वे प्रतिलिपि बनाई गई फाइलों से बड़े हों। और मैं इसे पूरी तरह से noniteractive करना चाहता हूँ क्योंकि यह एक crontab बैश स्क्रिप्ट का हिस्सा होगा। कोई विचार?लिनक्स कैसे कॉपी करें लेकिन ओवरराइट नहीं करें?
उत्तर
man page से लिया:
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
उदाहरण:
cp -n myoldfile.txt mycopiedfile.txt
इसके बजाय का उपयोग 'rsync -a -v --ignore मौजूदा
मैंने किया 'cp -n config.js.sample config.js' और यह –
@ व्हाइटबर्ड का समाधान स्पॉट-ऑन भी काम करता है। –
cp -n
क्या आप चाहते हैं। मैन पेज देखें।
लोग पाते हैं कि कि (RedHat पर मेरे जैसे) एक 'एन' विकल्प नहीं है के लिए आप cp -u
का उपयोग कर सकते केवल स्रोत लिखें यदि स्रोत मौजूदा से नया है (या कोई मौजूदा नहीं है)।
[संपादित करें] टिप्पणियों में उल्लिखित अनुसार, यह पुरानी फाइलों को ओवरराइट करेगा, इसलिए ओपी वांछित नहीं है। उस के लिए छत का जवाब का प्रयोग करें।
ओपी ने मौजूदा फाइलों को ओवरराइट नहीं करने के लिए कहा ** भले ही वे कॉपी की गई फाइलों से पुराने हैं **, इसलिए '-यू' वास्तव में उद्देश्य के अनुरूप नहीं है। –
अच्छाई, आप बिल्कुल सही हैं। मुझे आश्चर्य है कि किसी को भी नोटिस करने में इतना समय लगा। –
rsync
का उपयोग करने पर विचार करें।
rsync -a -v src dst
लेकिन यह अगर अद्यतन फ़ाइलें अलग होगा।
टिप्पणियों के अनुसार
rsync -a -v --ignore-existing src dst
पूरी तरह से मौजूदा फ़ाइलों अनदेखी करेंगे।
अल्पाइन 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
के रूप में कॉपी करते हैं।
https://unix.stackexchange.com/questions/67539/how-to-rsync-only-new-files – n611x007