2013-09-23 7 views
84

के साथ निर्देशिका से सभी फ़ाइलों को कॉपी करें, मैं अपनी निर्माण प्रक्रिया के हिस्से के रूप में निर्देशिका में सभी फ़ाइलों को दूसरी निर्देशिका में कॉपी करने की कोशिश कर रहा हूं। यह व्यक्तिगत फ़ाइलों के लिए ठीक काम करता है जो मैं स्पष्ट रूप से निर्दिष्ट करता हूं लेकिन जब मैं पूरी निर्देशिका की प्रतिलिपि बनाने का प्रयास करता हूं तो यह अजीब चीजें करता है जैसे पूर्ण निर्देशिका संरचना (या कुछ भी नहीं) की प्रतिलिपि बनाता है।Grunt.js प्रतिलिपि

 { src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" } 

उत्तर

138

this answer में के रूप में flatten: true विकल्प कुछ मामलों के लिए काम कर सकते हैं, लेकिन यह dest करने के लिए, मुझे लगता है कि (मेरे मामले में) और अधिक सामान्य आवश्यकता एक फ़ोल्डर और इसके उप-फ़ोल्डर संरचना की नकल करने के लिए है, के रूप में-है । ऐसा लगता है कि ज्यादातर मामलों में यदि आपके पास उप-फ़ोल्डर्स हैं, तो शायद उन्हें कोड में उस तरह से संदर्भित किया जा रहा है।

copy: { 
    files: { 
    cwd: 'path/to/files', // set working folder/root to copy 
    src: '**/*',   // copy all files and subfolders 
    dest: 'dist/files', // destination folder 
    expand: true   // required when using cwd 
    } 
} 
+0

धन्यवाद - आप सही जवाब दे रहे हैं जब मैं सवाल पूछता हूं तो मैं यही देख रहा हूं। मैंने पिछले जवाब के कारण फ़्लैटनिंग को सौदा करना सीखा लेकिन यह परेशान था। –

+12

मैंने इसके लिए एक घंटे से अधिक समय खो दिया है ... यदि आप 'cwd' विकल्पों का उपयोग करते हैं, तो' विस्तार: सत्य 'चालू करना सुनिश्चित करें। यदि आप 'विस्तार: सत्य' सेट नहीं करते हैं, तो cwd ठीक से काम नहीं करेगा। – ducin

+2

मुझे यह सुनिश्चित करना था कि निर्देशिका पथ '/' के साथ समाप्त हो जाएं और यह काम करने के लिए 'flatten: false' जोड़ें। –

42

यह कार्य करता है, तो आप एक फ़ाइल निर्दिष्ट फ़ोल्डर संरचना बनाए रखेगा:

copy: { 
    myvoice: { 
    files: [ 
     { src:"src/html/index.html", dest:"dist/myvoice/index.html" }, 
     { src:"src/html/css/style.css", dest:"dist/myvoice/css/style.css" }, 
     { src:"src/html/js/require.js", dest:"dist/myvoice/js/require.js" }, 
     { src:"build/myvoice/main.js", dest:"dist/myvoice/js/main.js" }, 
     { src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" } 
    ] 
    } 
}, 

विशेष रूप से यह अंतिम पंक्ति है कि मैं काम करने के लिए नहीं मिल सकता है: यहाँ मेरी GruntFile.js से प्रासंगिक हिस्सा है glob। आप क्या चाहते हैं flatten विकल्प जो संरचना को हटा देगा।

{ 
    expand: true, 
    flatten: true, 
    src: ['src/html/css/fonts/**'], 
    dest: 'dist/myvoice/css/fonts/', 
    filter: 'isFile' 
} 

Github repo में उपलब्ध विकल्पों को ढूंढें। उम्मीद है की यह मदद करेगा।

22

मैं जोड़ने के लिए src में glob का स्वरूप बदल रहा है कि चाहते हैं कैसे प्रतिलिपि को संशोधित करेगा: ऐसा करने के लिए महत्वपूर्ण cwd विकल्प है, जो निर्दिष्ट कार्यशील निर्देशिका को सुरक्षित करेगा फ़ोल्डर संरचना रिश्तेदार है काम करता है।

रूप bmoeskau द्वारा बताया ऊपर, निम्नलिखित dist/ अंदर सब कुछ कॉपी और path/to/dir (गंतव्य अधिलेखन अगर यह पहले से मौजूद है) में ले जाएगा।

copy: { 
    files: { 
    expand: true, 
    dest: 'path/to/dir', 
    cwd: 'dist/', 
    src: '**' 
    } 
} 

नोट यह है कि:

copy: { 
    files: { 
    expand: true, 
    dest: 'path/to/dir', 
    cwd: 'dist/', 
    src: '*' 
    } 
} 

केवल dist/ के साथ ही निर्देशिका के अंदर फ़ाइलों की प्रतिलिपि होगा, लेकिन गंतव्य के लिए उन निर्देशिकाओं की सामग्री की प्रतिलिपि नहींहोगा।

इसके अलावा, dist/ अंदर की सामग्री के साथ src: '*/*' होगा केवल प्रतिलिपि निर्देशिका के साथ निम्नलिखित। यही है, dist/ के अंदर फाइलों की प्रतिलिपि नहीं बनाई जाएगी।

copy: { 
    files: { 
    expand: true, 
    dest: 'path/to/dir', 
    cwd: 'dist/', 
    src: '*/*' 
    } 
} 

अंत में, इसके बाद के संस्करण के रूप में ही है, लेकिन src: '**/**'path/to/dir को dist/ उपनिर्देशिका अंदर dist/ के साथ ही फाइलों के अंदर केवल फ़ाइलों की प्रतिलिपि होगा। तो गंतव्य के अंदर कोई फ़ोल्डर नहीं होगा।

copy: { 
    files: { 
    expand: true, 
    dest: 'path/to/dir', 
    cwd: 'dist/', 
    src: '*/*', 
    flatten: true, 
    filter: 'isFile' 
    } 
} 
+4

महान व्याख्या! +1 – myrocode

+2

github पर प्रलेखन से बेहतर, मुझे उदाहरण – wukong

+0

+1 पसंद है क्या सितारों की संख्या का मतलब होना चाहिए, उदाहरण के लिए '**' हमेशा फाइलों और निर्देशिकाओं का मतलब है, और '*' सिर्फ फाइलें? – CodyBugstein

0

फाइल सेगमेंट (कॉफ़ीस्क्रिप्ट में) के लिए उदासीन घुंघराले ब्रेसिज़ का उपयोग करना था ...

copy: { 
    files: [ 
    cwd: 'path/to/files' 
    src: '**/*' 
    dest: 'dist/files' 
    expand: true 
    ] 
} 
0

यदि आप कोणीय यौवन के साथ विकास कर रहे हैं, तो यह नकली के साथ प्रतिलिपि बनाने का बेहतर तरीका है। विस्तार: cwd का उपयोग करते समय सत्य की आवश्यकता होती है। <% = yeoman.app%> केवल ऐप रूट ('।') है।

{ 
    expand: true, 
    cwd: '<%= yeoman.app %>/data', 
    dest: '<%= yeoman.dist %>/data', 
    src: ['**'] 
    } 
+0

हालांकि यह कोड स्निपेट प्रश्न हल कर सकता है, [एक स्पष्टीकरण सहित] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। कृपया व्याख्यात्मक टिप्पणियों के साथ अपने कोड को भीड़ न करने का प्रयास करें, क्योंकि इससे कोड और स्पष्टीकरण दोनों की पठनीयता कम हो जाती है! – FrankerZ

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