python - कैसे अजगर में निर्देशिका की नकल करने के लिए और सभी को अधिलेखित करें?




copy distutils (2)

आप distutils.dir_util.copy_tree उपयोग कर सकते हैं। यह ठीक काम करता है और आपको हर तर्क को पारित करने की आवश्यकता नहीं है, केवल src और dst अनिवार्य हैं।

हालाँकि आपके मामले में आप shutil.copytree जैसे समान टूल का उपयोग नहीं कर सकते क्योंकि यह अलग तरह से व्यवहार करता है: क्योंकि गंतव्य निर्देशिका मौजूद नहीं होनी चाहिए क्योंकि यह फ़ंक्शन इसकी सामग्री को अधिलेखित करने के लिए उपयोग नहीं किया जा सकता है।

यदि आप cp टूल का उपयोग करना चाहते हैं जैसा कि प्रश्न टिप्पणियों में सुझाया गया है कि subprocess मॉड्यूल का उपयोग करना वर्तमान में नई प्रक्रियाओं को स्पॉन करने के लिए अनुशंसित तरीका है जैसा कि आप os.system फ़ंक्शन के दस्तावेज़ में देख सकते हैं।

मैं /home/myUser/dir1/ और उसकी सभी सामग्री (और उनकी सामग्री, आदि) /home/myUser/dir1/ को कॉपी करने की कोशिश कर रहा हूं। इसके अलावा, मैं चाहता हूँ कि प्रतिलिपि dir2/ में सब कुछ अधिलेखित कर दे।

ऐसा लगता है कि distutils.dir_util.copy_tree नौकरी के लिए सही उपकरण हो सकता है, लेकिन यकीन नहीं होता कि इस तरह के एक सरल कार्य के लिए उपयोग करने में कुछ आसान / अधिक स्पष्ट है।

यदि यह सही उपकरण है, तो मैं इसका उपयोग कैसे करूं? docs अनुसार 8 पैरामीटर हैं जो इसे लेते हैं। क्या मुझे सभी 8 पास करने हैं, केवल src , dst और update , और यदि हां, तो मैं कैसे (मैं अजगर के लिए बिल्कुल नया हूं)।

अगर वहाँ कुछ है जो बेहतर है, तो क्या कोई मुझे एक उदाहरण दे सकता है और मुझे सही दिशा में इंगित कर सकता है? अग्रिम में धन्यवाद!


यहां एक स्रोत के साथ गंतव्य को फिर से लिखना, किसी भी आवश्यक निर्देशिका को बनाते समय इसे फिर से लिखना एक सरल उपाय है। यह सीमलिंक को संभालता नहीं है, लेकिन यह एक साधारण एक्सटेंशन होगा (ऊपर दिए गए @Michael द्वारा उत्तर देखें)।

def recursive_overwrite(src, dest, ignore=None):
    if os.path.isdir(src):
        if not os.path.isdir(dest):
            os.makedirs(dest)
        files = os.listdir(src)
        if ignore is not None:
            ignored = ignore(src, files)
        else:
            ignored = set()
        for f in files:
            if f not in ignored:
                recursive_overwrite(os.path.join(src, f), 
                                    os.path.join(dest, f), 
                                    ignore)
    else:
        shutil.copyfile(src, dest)




distutils