2013-09-23 8 views
5

मैं rm का उपयोग कर निर्देशिका में फ़ाइलों को हटाने की कोशिश कर रहा हूं और निर्देशिका को स्वयं स्क्रिप्ट में हटाए बिना। उदाहरण जो मैं देखता हूं केवल निर्देशिका में ही करते हैं, और मैं इसे वहां नेविगेट किए बिना करना चाहता हूं।बैश वाइल्डकार्ड का उपयोग

मैं

rm "$(dirname $1)/filetokeep/*" 

कोशिश की, लेकिन यह काम नहीं कर रहा है। कोई मदद?

+0

क्यों '1 नाम' dirname? – user567879

+0

एक .sln फ़ाइल उसी निर्देशिका के साथ पास की जाती है जैसे इसकी निर्देशिका – user2805565

उत्तर

6

वाइल्डकार्ड का उद्धरण विस्तार को रोकता है।

rm -- "$(dirname -- "$1")/filetokeep"/* 

का उपयोग करना -- सुनिश्चित करता है कि मूल्यों को वैकल्पिक तर्क के बजाय स्थितीय लोगों (ताकि चीजें अभी भी अगर निर्देशिका एक - साथ $1 शुरू होता है में नाम काम करते हैं) के रूप में व्याख्या नहीं की जा सकती।

+0

धन्यवाद, मैं बैश करने के लिए नया हूं। मैं सामानों का एक गुच्छा कोशिश कर रहा था, ऐसा लगता है कि मैं उद्धरणों का उपयोग कर रहा हूं। मेरे मूल प्रयास पर उद्धरण हटाने से भी काम करता है। – user2805565

+0

@ user2805565 उद्धरणों को सीधे हटाकर बग का कारण बन जाएगा; आप केवल उन्हें अंतिम चरित्र से बाहर ले जाना चाहते हैं। –

+1

... असल में, यह 'आरएम "$ (डायरनाम" $ 1 ")/filetokeep"/* 'पूरी तरह से सही होना चाहिए (' $ 1' -' $() 'के आसपास के आंतरिक उद्धरण एक नया उद्धरण संदर्भ बनाता है, तो यह वास्तव में दिया गया काम करता है)। –

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