2009-03-02 15 views
19

मैं फेडोरा में एक विशिष्ट प्रतिलिपि करना चाहता हूं।मैं एक निर्देशिका को दूसरी बार कैसे कॉपी कर सकता हूं और केवल उन फ़ाइलों को प्रतिस्थापित कर सकता हूं जो बदले नहीं गए हैं?

  • 'webroot':

    मैं दो फ़ोल्डर्स है पकड़े सभी वेब फ़ाइलें/छवियों आदि

  • 'निर्यात': पीएचपी, सीएसएस, जेएस दस्तावेजों के हजारों है कि से निर्यात किया जाता है वाले फ़ोल्डर मेरा एसवीएन रेपो

निर्यात निर्देशिका में रूट्स की एक ही फाइल/फ़ोल्डर्स शामिल हैं, हालांकि जड़ में निर्यात में अतिरिक्त नहीं हैं।

मैं इन विकल्पों के साथ मेरी webroot साथ निर्यात की सारी सामग्री को मर्ज करने के लिए करना चाहते हैं:

  1. webroot में फ़ाइल ओवरराइट अगर निर्यात के संस्करण क्या webroot के संस्करण के अंदर है की तुलना में अलग कोड (रहते हैं)
  2. बचाना अनुमतियाँ/उपयोगकर्ताओं/फ़ाइल के समूहों अगर यह ओवरराइट किया जाता है (निर्यात रूपान्तर की जगह लाइव संस्करण) * नोट मैं webroots अनुमतियाँ/स्वामित्व बनाए रखा चाहते हैं, लेकिन निर्यात की सामग्री से
  3. कोई उत्साह प्रतिलिपि/रोकना किसी भी तरह (यानी वर्बोज़ नहीं)
  4. रिकर्सिव नकल की - स्पष्ट रूप से मैं निर्यात में सभी * फ़ाइलों फ़ोल्डर और सबफ़ोल्डर पाया कॉपी करना चाहते हैं

मैं सीपी में अनुसंधान के एक बिट किया है - इस काम ?: करना होगा

cp -pruf ./export /path/to/webroot 
+0

ध्यान दें कि आपका पहला मानदंड स्पष्ट कट नहीं है। जवाब ज्यादातर मानते हैं कि 'अगर वेब्रूट में फ़ाइल निर्यात में फ़ाइल से नई है, तो इसे अकेला छोड़ दें'। यदि आप वास्तव में 'सामग्रियों की तुलना करें और यदि कोई अंतर है तो निर्यात संस्करण की प्रतिलिपि बनाएँ', तो बस सबकुछ कॉपी करें ... जारी रखें ... –

+0

... निरंतरता ... जैसे नई फाइलें दिखाई देंगी, और पुरानी फाइलें दोनों में वही प्रतिलिपि के बाद भी वही होगा - शायद संशोधन समय के अलावा। –

+0

इस प्रतिक्रिया के लिए धन्यवाद - मैं सवाल अपडेट करूँगा – barfoon

उत्तर

24

यह हो सकता है, लेकिन किसी भी समय export और webroot में संबंधित फ़ाइलों में एक ही सामग्री है लेकिन अलग-अलग संशोधन समय हैं, तो आप एक अनावश्यक प्रतिलिपि करने के लिए हवादार हो जाएंगे। आप शायद rsync से थोड़ा होशियार व्यवहार मिल चाहते हैं:

rsync -pr ./export /path/to/webroot 

इसके अलावा, rsync फ़ाइलें एक मेजबान से दूसरे में एक SSH कनेक्शन कॉपी कर सकते हैं, अगर आप कभी भी ऐसा करने के लिए एक की जरूरत है। इसके अलावा, इसमें एक अरब विकल्प हैं जिन्हें आप अपने व्यवहार को ट्विक करने के लिए निर्दिष्ट कर सकते हैं - विवरण के लिए मैन पेज में देखें।

EDIT: अनुमतियों को संरक्षित करके आपका क्या मतलब है इसके बारे में आपकी स्पष्टीकरण के संबंध में: आप शायद -p विकल्प को छोड़ना चाहते हैं।

6
  1. -u अधिलेखित कर देता है, तो गंतव्य स्रोत से अधिक पुराना है मौजूदा फ़ाइलों फ़ोल्डर
  2. -p अनुमति perserves और तारीखों
  3. -f शब्दाडंबर
  4. -r प्रतिलिपि पुनरावर्ती बनाता है बंद हो जाती है
  5. की तरह आप सीपी करने के लिए सभी सही आर्ग मिला

तो लग रहा है

5

एक नौकरी की तरह लगता है cpio के लिए (और इसलिए, शायद, जीएनयू टार यह भी कर सकते हैं):

cd export 
find . -print | cpio -pvdm /path/to/webroot 

आप संरक्षित मालिकों की जरूरत है, तो आप निश्चित रूप से रूट के रूप में यह करने के लिए, है। -p विकल्प 'पास मोड' है, जिसका अर्थ है स्थानों के बीच प्रतिलिपि; -v वर्बोज़ है (लेकिन इंटरैक्टिव नहीं; एक अंतर है); -d का मतलब आवश्यकतानुसार निर्देशिका बनाना है; -m का मतलब है संशोधन समय को संरक्षित करें। डिफ़ॉल्ट रूप से, -u विकल्प के बिना, cpio स्रोत क्षेत्र से किसी एक से अधिक लक्षित क्षेत्र में फ़ाइलों को ओवरराइट नहीं करेगा।

संबंधित मुद्दे

 संबंधित मुद्दे