जब मैं उपयोग करता हूं
cp -R inputFolder outputFolder
परिणाम संदर्भ-निर्भर है :
- यदि
outputFolder
मौजूद नहीं है, तो यह बनाया जाएगा, और क्लोन फ़ोल्डर पथ होगाoutputFolder
। - यदि
outputFolder
मौजूद है, तो बनाया गया क्लोन होगाoutputFolder/inputFolder
यह भयानक है , क्योंकि मैं कुछ इंस्टॉलेशन स्क्रिप्ट बनाना चाहता हूं, और यदि उपयोगकर्ता इसे दो बार गलती से चलाता है, तो उसने outputFolder
पहली बार बनाया होगा , फिर दूसरे रन पर सभी सामान एक बार फिर से बनाए जाएंगे outputFolder/inputFolder
।
- मैं हमेशा पहला व्यवहार चाहता हूं: मूल (एक भाई के रूप में) के बगल में एक क्लोन बनाएं।
- मैं
cp
पोर्टेबल होना चाहता हूं (जैसे MINGW के पासrsync
शिप नहीं है ) - मैंने जाँच की
cp -R --parents
लेकिन यह डाइरेक्टरी ट्री के सारे रास्ते को फिर से बनाता है (इसलिए क्लोन नहीं होगाoutputFolder
लेकिनsome/path/outputFolder
) --remove-destination
या--update
मामले 2 में कुछ भी नहीं बदला है, फिर भी चीजें कॉपी की जाती हैंoutputFolder/inputFolder
क्या इसके अस्तित्व के लिए पहली जाँच के बिना ऐसा करने का एक तरीका है outputFolder
(यदि फ़ोल्डर तब मौजूद नहीं है ...) या उपयोग कर रहा है rm -rf outputFolder
?
क्या करने के लिए सहमत, पोर्टेबल UNIX तरीका है?
rsync
?
cp
, तो tar
पेड़ों को कॉपी करने के लिए दो आदेशों के बीच पाइपिंग एक अच्छा विश्वसनीय तरीका है।
rsync
शिप नहीं है ।
tar -C input -cf - . | tar -C output -xf -
काम करता है। -C
वर्किंग डाइरेक्टरी को बदल देता है, लेकिन यह एक मानक विकल्प नहीं है, इसलिए यदि इसका समर्थन नहीं किया गया है तो आपको शुरू करने के लिए सही कार्य निर्देशिकाओं में दो टार चलाने की आवश्यकता है, जैसे ( cd input && tar -cf - . ) | ( cd output && tar -xf - )
कि यदि आप विंडोज के साथ काम कर रहे हैं तो मैं सिर्फ रोइमा के उत्तर का उपयोग करूंगा।
mv
से कैसे रोकें ?