यदि Powershell का उपयोग करके मैं अपनी सामग्री को अधिलेखित करता हूं, तो मैं किसी निर्देशिका की प्रतिलिपि कैसे बना सकता हूं?


9

मेरे पास इसमें कुछ फ़ाइलों के साथ एक निर्देशिका स्रोत है, जिसे मैं एक फ़ोल्डर गंतव्य पर कॉपी करना चाहूंगा। गंतव्य मौजूद हो सकता है, और इसमें पहले से ही फाइलें हो सकती हैं। स्रोत में समान नाम वाली कोई भी फ़ाइल अधिलेखित की जानी चाहिए।

अगर मैं इसे पॉवर्स में चलाऊं:

Copy-Item Source Destination -Force -Recurse
Copy-Item Source Destination -Force -Recurse
Copy-Item Source Destination -Force -Recurse

फिर पहली पंक्ति फ़ोल्डर बनाता है .\Destinationऔर .\Sourceउसमें प्रतियां बनाता है, जो कि मैं अगली बार दोहराना चाहता हूं। हालाँकि, दूसरी पंक्ति .\Sourceनए .\Destinationफ़ोल्डर में प्रतिलिपि बनाता है (बनाने के .\Destination\Sourceबजाय), फिर तीसरी पंक्ति .\Destination\Sourceफिर से अधिलेखित हो जाती है।

मैं इसे हर समय पहले मामले की तरह कैसे बना सकता हूं? यानी .\Destinationइसमें कॉपी करने के बजाय ओवरराइट करें ?


क्या आप स्पष्ट कर सकते हो? आप "स्रोत" की सामग्री को "गंतव्य" में कॉपी करना चाहते हैं? और फ़ोल्डर "स्रोत" को "गंतव्य" में कॉपी न करें?
BroScience

हाँ, यह सही है। "गंतव्य" फ़ोल्डर मौजूद नहीं हो सकता है, इसलिए मैं चाहता हूं कि अगर यह बाहर नहीं निकलता है तो इसे बनाया जाए।
डगलस

यह विकल्प के रूप में रोबोकॉपी पर विचार करने के लायक हो सकता है । आप अभी भी इसे शक्तियां से बुला सकते हैं यदि आपको आवश्यकता है। यह if existsआसानी से इस मुद्दे को संभाल लेगा और अभद्रता से आपको अपने गंतव्य को फिर से हटाने के लिए मजबूर करने की आवश्यकता होगी, जो कि अपने स्वयं के खतरों के साथ आता है।
जेरेमी

बारीकी से संबंधित एसओ सवाल: stackoverflow.com/q/47964451/45375
mklement0

जवाबों:


7

तो समस्या यह है कि

cp -r -fo foo bar

केवल काम करता है अगर barमौजूद नहीं है और

cp -r -fo foo/* bar

केवल barमौजूद है तो काम करता है। तो चारों ओर काम करने के लिए, आपको barकुछ भी करने से पहले यह सुनिश्चित करने की आवश्यकता है कि मौजूद है

md -f bar
cp -r -fo foo/* bar

3

यदि आप केवल "स्रोत" फ़ोल्डर उपयोग की सामग्री की प्रतिलिपि बनाना चाहते हैं

copy-item .\source\* .\destination -force -recurse

1
यह केवल तभी काम करता है जब destinationपहले से मौजूद हो।
स्टीवन पेनी

3

स्टीवन पेनी का जवाब https://superuser.com/a/742719/126444 केवल लक्ष्य करने के लिए लक्षित निर्देशिका की मूल सामग्री को नष्ट नहीं करता है। मुझे स्रोत की सामग्री के साथ लक्ष्य फ़ोल्डर को पूरी तरह से बदलने की आवश्यकता है और 2 फ़ंक्शन बनाए गए हैं:

function CopyToEmptyFolder($source, $target )
{
    DeleteIfExistsAndCreateEmptyFolder($target )
    Copy-Item $source\* $target -recurse -force
}
function DeleteIfExistsAndCreateEmptyFolder($dir )
{
    if ( Test-Path $dir ) {
    #http://stackoverflow.com/questions/7909167/how-to-quietly-remove-a-directory-with-content-in-powershell/9012108#9012108
           Get-ChildItem -Path  $dir -Force -Recurse | Remove-Item -force -recurse
           Remove-Item $dir -Force

    }
    New-Item -ItemType Directory -Force -Path $dir
}

1

मान लीजिए कि आपके पास निर्देशिकाएँ की निम्न संरचना है

  • जड़

    • folder_a
      • a.txt
      • b.txt
      • c.txt
    • folder_b
      • a.txt
      • b.txt

    रूट फ़ोल्डर में आप कमांड के निम्नलिखित अनुक्रम द्वारा इच्छित परिणाम प्राप्त कर सकते हैं:

    $files = gci ./folder_b -name
    cp ./folder_a/*.txt -Exclude $files ./folder_b

केवल c.txt की प्रतिलिपि बनाई जाएगी

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