यह क्यों काम नहीं करता है?निर्देशिका में सभी फ़ाइलों को कैसे स्रोत करें?
find . -maxdepth 1 -type f -print0 | xargs -0 .
मुझे लगता है कि xargs: .: Permission denied
है।
यह क्यों काम नहीं करता है?निर्देशिका में सभी फ़ाइलों को कैसे स्रोत करें?
find . -maxdepth 1 -type f -print0 | xargs -0 .
मुझे लगता है कि xargs: .: Permission denied
है।
जब आप . file
चलाते हैं, तो आप .
बनाया गया खोल खोलते हैं। आपका xargs
संस्करण वर्तमान निर्देशिका को निष्पादित करने का प्रयास करता है।
भले ही उसने बिल्टिन का आह्वान किया हो, वह आदेश एक सबहेल में चलता है, इसलिए सभी "सोर्सिंग" बेकार होगा।
उपयोग खोल ग्लोबिंग और उस के लिए एक पाश:
for file in * ; do
if [ -f "$file" ] ; then
. "$file"
fi
done
@ चटाई के समाधान साफ है, लेकिन मामले में आप इसे मजाक, निम्नलिखित समाधान के लिए कुछ बैश फू में रुचि रखते हैं , मूल find
आदेश के आधार पर, काम करता है, भी:
eval $(find . -maxdepth 1 -type f -exec echo . \'{}\'';' \;)
find
एक सौ के निर्माण के लिए -exec
साथ प्रयोग किया जाता है प्रत्येक फ़ाइल के लिए rcing कमांड मिला, उदा। . './foo';
। विशेष वर्णों के साथ फ़ाइल नाम सुनिश्चित करने के लिए बच निकले एकल उद्धरणों पर ध्यान दें। ठीक से संभाला जाता है।find
सोर्सिंग कमांड की एक नई-अलग-अलग सूची लौटाएगा; कमांड प्रतिस्थापन ($()
) बिना डबल-कोटिंग का उपयोग करके, खोल अलग-अलग के रूप में प्रत्येक स्थान का उपयोग करके इन पंक्तियों को एक पंक्ति में जोड़ता है।eval
वर्तमान खोल (ओएस एक्स 10.8.1 पर सत्यापित) के संदर्भ में सोर्सिंग कमांड की पूरी सूची निष्पादित करता है।नोट: इस समाधान के साथ एक संभावित समस्या यह है कि कमांड स्ट्रिंग बड़ी हो सकती है - संभवतः बहुत बड़ी - कई फाइलें और/या लंबे फ़ाइल नाम मौजूद हैं।
स्पष्टीकरण के लिए धन्यवाद! –
स्वच्छ समाधान; यह जानना अच्छा है कि आप उस मामले के लिए 'xargs' (और 'find''s' -exec' प्राथमिक 'के साथ बिल्टिन का उपयोग नहीं कर सकते हैं। यहां समकक्ष एक-लाइनर है: 'f में * के लिए; करो [[-एफ "$ एफ"]] &&। "$ च"; किया गया – mklement0