लिनक्स में फाइलें कॉपी करें, अगर गंतव्य में फाइलें मौजूद हैं तो कॉपी से बचें


32

मुझे एक हार्ड डिस्क से दूसरे घर / / उपयोगकर्ता फ़ोल्डर की प्रतिलिपि बनाने की आवश्यकता है। इसमें 100,000 फाइलें और लगभग 10G आकार है।

मैं उपयोग करता हूं

cp -r /origin /destination

कभी-कभी मुझे टूटी हुई लिंक, अनुमतियां आदि के कारण कुछ त्रुटियां मिलती हैं। इसलिए मैं त्रुटि को ठीक करता हूं, और प्रतिलिपि को फिर से शुरू करने की आवश्यकता है।

मुझे आश्चर्य है कि मैं कमांड "cp" कैसे बता सकता हूं, एक बार यह फिर से कॉपी करने की कोशिश करता है, न कि फाइलों को फिर से कॉपी करने के लिए यदि वे गंतव्य फ़ोल्डर में मौजूद हैं।


2
हमें सी.पी. इसके बजाय rsync का उपयोग करें।
विलियम पर्ससेल

जवाबों:


22

cp -R -u -p /source /destination

-u( या--update ) झंडा सिर्फ इस करता है:

Cp के लिए मैन पेज से:

-उ, - चुप

केवल तभी कॉपी करें जब SOURCE फ़ाइल गंतव्य फ़ाइल की तुलना में नई हो या जब गंतव्य फ़ाइल गायब हो


6
वस्तुतः केवल उन फ़ाइलों को कॉपी करें जो मौजूद नहीं हैं और जो मौजूदा अपडेट नहीं हैं, yes n | cp -i /source/* /destination 2>/dev/null
sventechie

4
-u, - केवल कॉपी करें जब SOURCE फ़ाइल गंतव्य फ़ाइल की तुलना में नई हो या जब गंतव्य फ़ाइल अनुपलब्ध हो, तो -U, - कॉपी प्रतिलिपि केवल तब करें जब SOURCE फ़ाइल गंतव्य फ़ाइल की तुलना में नई हो या जब गंतव्य फ़ाइल अनुपलब्ध हो। -p के रूप में ही --preserve = मोड, स्वामित्व, टाइमस्टैम्प --preserve [= ATTR_LIST] निर्दिष्ट विशेषताओं को संरक्षित करें (डिफ़ॉल्ट: मोड, स्वामित्व, टाइम स्टैम्प), यदि संभव हो तो अतिरिक्त विशेषताएँ: संदर्भ, लिंक, xattr, सभी
Covich

51

बस उपयोग करें cp -n <source> <dest>

से आदमी पेज :

-एन, -नो-क्लोबर

मौजूदा फ़ाइल को अधिलेखित न करें (पिछले -i विकल्प को ओवरराइड करता है)


7
यह प्रश्न का एकमात्र सही उत्तर है।
सेबिक्स

20

rsync -aq /src /dest

केवल नई फ़ाइलों की प्रतिलिपि बनाने के अलावा, यह केवल फ़ाइलों के नए भागों की प्रतिलिपि भी करेगा यदि फ़ाइल बदल गई है। यह उन नेटवर्क लिंक पर कॉपी करने के लिए है जहाँ आप डेटा की मात्रा को कम करना चाहते हैं - लेकिन यह स्थानीय स्तर पर भी बहुत अच्छा काम करता है।


मैं आपके पोस्ट में `` फ़ॉर्मेटिंग नहीं जोड़ सकता क्योंकि यह केवल दो वर्ण हैं। आपको इसे संपादित करने और अपने कमांड के चारों ओर `वर्ण जोड़ने के बारे में कैसा महसूस होगा?
18

4

cpकमांड के लिए "-u" विकल्प देखें ।


2
असहमत हैं कि -u का उपयोग करना एक अच्छा विचार है। -u तभी कॉपी करता है जब स्रोत नया हो या गंतव्य गायब हो। मूल पोस्टर का मुद्दा जो भी कारण के लिए फाइल कॉपी ब्रेकिंग के कारण था। इसलिए ओपी के पास आधी लिखित फाइल होगी जिसे कॉपी को फिर से चलाने पर अपडेट नहीं किया गया था। वह फ़ाइल किसी के लिए महत्वपूर्ण हो सकती है! rsync इस समस्या को हल करता है।
हैमजैट

2

उपरोक्त सभी उत्तर सही हैं लेकिन यदि आप इसे पुनरावृत्ति कर रहे हैं

तुम्हें करना चाहिए:

 cp -rn SOURCE_PATH DESTINATION_PATH

1

अनुमतियाँ / स्वामित्व बनाए रखने के लिए आपको रूट के रूप में कॉपी करना चाहिए

# cp -au

इसके अलावा rsync को देखें


1

POSIX समाधान

अन्य उत्तर उपयोग -u या -nविकल्प cpPOSIX द्वारा इनमें से किसी की भी आवश्यकता नहीं है ; न ही rsyncअभी तक दूसरे जवाब से; न ही yesटिप्पणियों में से एक में उपयोग किया जाता है।

फिर भी हम yes nएक whileलूप के साथ प्रजनन कर सकते हैं । यह निम्नलिखित POSIX समाधान की ओर जाता है:

while true; do echo n; done | cp -Ri /origin /destination 2>/dev/null

0

उपयोग cp -rn <sourcedirname>/. <destdirname>

आर स्विच निर्देशिकाओं पर प्रतिलिपि पुनरावर्ती बनाता है।

N स्विच (लॉन्ग वर्जन नो-क्लोब) सुनिश्चित करता है कि मौजूदा फाइलें कभी भी ओवर-लिखित न हों।

/.Sourcedirname के बाद ' ' यह सुनिश्चित करता है कि यह पूर्व की सभी सामग्रियों के बजाय डेस्टिरिनेम के तहत एक उपनिर्देशिका नहीं बनती है, जिसे बाद में कॉपी किया जा रहा है।

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