2011-04-28 19 views
7

के दौरान एक फ़ोल्डर को कैसे पट्टी करें, मेरे पास एक फ़ाइल है जिसमें "लाइब्रेरीएक्स/ए/स्टफ/फ़ाइलवाईटीटीटी" जैसे फ़ाइलपैथ हैं, जिन्हें मैं एंटी बिल्ड में शामिलफाइल के रूप में उपयोग कर रहा हूं। हालांकि, मुझे प्रतिलिपि प्रक्रिया के दौरान पथ के "लाइब्रेरीएक्स/ए /" भाग को हटाने की आवश्यकता है: फ़ाइल को "लाइब्रेरीएक्स/ए/स्टफ/फ़ाइलवाईटीटीटी" से कॉपी किया जाता है और "सामग्री/FileY.txt" "। मैंने कुछ regexpmappers में देखा है लेकिन उनके साथ कोई सफलता नहीं मिली है। :/चींटी प्रतिलिपि

इसका उद्देश्य यह है कि लक्ष्य फ़ोल्डर में "स्टफ/मोरस्टफ" में कस्टम फाइलें हो सकती हैं, और मैं डिस्क को न्यूनतम में रखने और कस्टम फ़ाइलों को रखने के लिए ओवरराइट = "झूठी" का उपयोग करना चाहता हूं बरकरार।

चींटी:

<copy todir="C:/targetdir/" overwrite="false"> 
    <fileset dir="C:/sourcedir/"> 
     <includesfile name="C:/targetdir/includes.file" /> 
    </fileset> 
</copy> 

Includes.file:

LibraryX/A/Stuff/FileA.txt 
LibraryX/A/Stuff/FileB.txt 
LibraryX/A/Stuff/FileC.txt 
LibraryX/A/Stuff/FileY.txt 

Sourcedir:

sourcedir/LibraryX/A/Stuff/FileA.txt 
sourcedir/LibraryX/A/Stuff/FileB.txt 
sourcedir/LibraryX/A/Stuff/FileC.txt 
sourcedir/LibraryX/A/Stuff/FileY.txt 

लक्ष्य dir:

targetdir/Stuff/FileY.txt 

अब, सभी sourcedir पर में सामग्री -folder फ़ाइलें, TARGETDIR में सामग्री -folder में समाप्त होना चाहिए। पर कैसे?

बोनस: अगर मैं "TARGETDIR/LibraryX/ए/उत्पाद" से फाइल ले जाते हैं, वे सब कुछ "TARGETDIR/सामग्री" फ़ोल्डर में भी अधिलेखित = "false" के साथ ऊपर लिख देगा। संभवतः क्योंकि वे वर्तमान में सामग्री फ़ोल्डर में से अधिक की तुलना में नई फ़ाइलें हैं।

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

उत्तर

7

चींटी v1.8.2 से शुरू करना आप फ़ाइल पथ से कुछ प्रमुख निर्देशिकाओं को पट्टी करने के लिए cutdirsmapper का उपयोग कर सकते हैं। mapper type docs के बहुत नीचे देखें।

<copy todir="C:/targetdir/" overwrite="false"> 
    <fileset dir="C:/sourcedir/"> 
     <includesfile name="C:/targetdir/includes.file" /> 
    </fileset> 
    <cutdirsmapper dirs="2"/> 
</copy> 

बोनस: आप सभी से TARGETDIR नए स्रोत फ़ाइलों में सभी फाइलों को बनाने के लिए touch चींटी कार्य का उपयोग और इसलिए उन्हें ओवरराइट किया जा रहा से रोक सकता है।

+0

इस सुंदरता को मैंने जो कुछ भी जरूरी बताया, उसे सारांशित किया गया: cutdirsmapper वास्तव में चीज करता है और मैं पुराने चींटी संस्करणों के लिए स्पर्श का उपयोग कर सकता हूं। धन्यवाद! – crappish

+0

मैं एएनटी v1.8.2 का उपयोग कर रहा हूं, हालांकि मुझे की त्रुटि मिल रही है, 'कॉपी नेस्टेड "cutdirsmapper" तत्व का समर्थन नहीं करता है Pls मेरी मदद करते हैं – picnic4u