pathconvert काम शायद ज्यादातर मामलों में जाने के लिए पसंदीदा तरीका है। लेकिन जब निर्देशिका पेड़ बहुत बड़ा होता है और यह ईकोप्रोपर्टीज कार्य का उपयोग करता है तो यह एक छोटी सी समस्या पैदा करता है। एक बहुत बड़ी निर्देशिका पेड़ के साथ, pathconvert द्वारा उत्पन्न स्ट्रिंग विशाल हो सकता है। फिर echoproperties भारी स्ट्रिंग स्प्रे, उत्पादन के साथ काम करने के लिए और अधिक कठिन बनाते हैं। मुझे लगता है कि एक संपत्ति "1" के लिए सेट अगर वहाँ निर्देशिका में फ़ाइलों हैं बनाता है लिनक्स पर एक macrodef का उपयोग करें:
<macrodef name="chkDirContents" >
<attribute name="propertyName" />
<attribute name="dirPath" />
<attribute name="propertyFile" />
<sequential>
<exec executable="sh" dir="." failonerror="false" >
<arg value="-c" />
<arg value='fyles=`ls -1 @{dirPath} | head -1` ; if [ "$fyles" != "" ] ; then echo @{propertyName}=1 > @{propertyFile} ; fi' />
</exec>
</sequential>
</macrodef>
<target name="test" >
<tempfile destdir="." property="temp.file" deleteonexit="true" />
<chkDirContents propertyName="files.exist" dirPath="./target_dir" propertyFile="${temp.file}" />
<property file="${temp.file}" />
<echoproperties/>
</target>
"परीक्षण" लक्ष्य निष्पादित अगर वहाँ में फ़ाइलें हैं निम्नलिखित echoproperties लाइन उत्पन्न होगा ./ target_dir/निर्देशिका:
[echoproperties] files.exist=1
क्या "परीक्षण" करता है: यह एक अस्थायी फ़ाइल नाम, $ {temp.file}, जिसे बाद में एक संपत्ति फ़ाइल के रूप में इस्तेमाल किया जा सकता उत्पन्न करता है। फिर यह मैक्रोडेफ़ निष्पादित करता है, जो कि डायरपाथ निर्देशिका की सामग्री को जांचने के लिए खोल को कॉल करता है। अगर दीपपथ में कोई भी फाइल या निर्देशिकाएं हैं, तो यह संपत्ति नाम संपत्ति को अस्थायी फ़ाइल में 1 का मान निर्दिष्ट करती है। यह फ़ाइल को पढ़ता है और फ़ाइल में दी गई संपत्ति सेट करता है। अगर फ़ाइल खाली है, तो कोई संपत्ति परिभाषित नहीं की जाती है।
ध्यान दें कि वांछित अगर मैक्रोडेफ़ की अगली कॉल के लिए अस्थायी फ़ाइल का पुन: उपयोग किया जा सकता है। दूसरी तरफ, निश्चित रूप से, संपत्ति सेट होने के बाद, यह अपरिवर्तनीय है।
स्रोत
2013-08-30 15:12:24
कि सही लगता है - मैं इसे एक कोशिश देने के लिए मर रहा हूँ। अगर केवल 3 साल पहले मैंने सवाल पूछा था, तो मैंने बहुत समय बचाया होगा। चीयर्स, इयान – ianmayo