2016-06-09 3 views
12

के साथ एकाधिक निर्देशिकाओं की प्रतिलिपि बनाएँ परतों की संख्या को कम करने के लिए, एक कमांड में एकाधिक निर्देशिकाओं को कॉपी करने का कोई तरीका है? जैसे, के बजाय:एक कमांड

COPY dirone ./dirone 
COPY dirtwo ./dirtwo 
COPY dirthree ./dirthree 

मैं क्या करना चाहते हैं:

COPY dirone/ dirtwo/ dirthree/ ./ 

बहरहाल, यह प्रतियां सामग्री निर्देशिका के ... लेकिन मैं निर्देशिका खुद को प्रतिलिपि बनाना चाहते हैं।

उत्तर

9

प्रतिलिपि आदेश के दस्तावेज व्यवहार है कि:

हैं <src> एक निर्देशिका है, निर्देशिका की सारी सामग्री को फाइल सिस्टम मेटाडाटा सहित, कॉपी कर रहे हैं।

नोट: निर्देशिका की प्रतिलिपि बनाई गई है, बस इसकी सामग्री।

सबसे अच्छा कामकाज मैं सुझाव दे सकता हूं कि आप अपने निर्माण फ़ोल्डर में अपनी निर्देशिका लेआउट को बदल दें, तीन फ़ोल्डरों को एक मूल फ़ोल्डर के नीचे ले जाएं और पैरेंट जोड़ें।

6

BMitch answered के रूप में, यह अपेक्षा की जाती है कि कॉपी करें।

एक विकल्प टैरबॉल की सामग्री ADD होगा।

प्रारंभिक टारबॉल बनाएं

tar -cvf dirs.tar dirone/ dirtwo/ dirthree/ 

निर्माण

FROM busybox 
ADD dirs.tar/
CMD find /dirone /dirtwo /dirthree 

टारबॉल स्वचालित रूप से निकाला जाता है

○ →docker run c28f96eadd58 
/dirone 
/dirone/one 
/dirtwo 
/dirtwo/two 
/dirthree 
/dirthree/three 

नोट कि हर बार जब आप टार फ़ाइल अद्यतन करने के लिए यह करें आप डॉकर बिल्ड कैश को अमान्य कर रहे हैं वह कदम यदि आप बहुत सारी फाइलों से निपट रहे हैं तो आप tar -c करते समय स्मार्ट बनना चाहेंगे। यदि आप टैरबॉल से स्वचालित रूप से हटाए जा रहे फ़ाइलों से निपट सकते हैं तो आप tar -u का भी उपयोग कर सकते हैं।

[ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something 
संबंधित मुद्दे