करने के लिए एक अधिक कुशल विकल्प है।
आप इसे shopt -s extglob
के साथ चालू करते हैं, और इसे shopt -u extglob
के साथ बंद कर देते हैं।
अपने उदाहरण में, आप शुरू में करना होगा:
$ shopt -s extglob
$ cp !(*Music*) /target_directory
पूर्ण उपलब्ध ext समाप्त हो गया ग्लोब बिंग ऑपरेटरों (man bash
से अंश) कर रहे हैं:
extglob खोल विकल्प हैं शॉपेट बिल्टिन का उपयोग करके सक्षम है, कई विस्तारित पैटर्न मिलान ऑपरेटरों को पहचाना जाता है। निम्नलिखित विवरण में, एक पेट टर्न-सूची एक या अधिक पैटर्न से अलग है।
- : समग्र पैटर्न एक या अधिक निम्नलिखित उप-पैटर्न का उपयोग का गठन किया जा सकता है?(पैटर्न-सूची)
मेल खाता शून्य या दिए गए पैटर्न में से एक घटना
- * (पैटर्न-सूची)
दिया पैटर्न के शून्य या अधिक घटनाओं मेल
- + (पैटर्न-सूची)
दिया पैटर्न
- @ (पैटर्न-सूची)
दिया पैटर्न में से एक मेल के एक या अधिक घटनाओं मेल
- ! (पैटर्न-सूची)
दिया पैटर्न में से एक के अलावा कुछ मेल
तो, उदाहरण के लिए, अगर आप या मौजूदा निर्देशिका में सभी फ़ाइलें .c
नहीं हैं सूचीबद्ध करने के लिए करना चाहता था .h
फ़ाइलें, आप क्या करेंगे:
$ ls -d !(*@(.c|.h))
बेशक
, सामान्य खोल globing काम करता है, इसलिए पिछले उदाहरण के रूप में भी लिखा जा सकता है:
$ ls -d !(*.[ch])
मुझे यह सुविधा पसंद है: 'ls/dir/* /! (Base *)' –
आप सबकुछ (*) कैसे शामिल करते हैं और बहिष्कृत भी करते हैं! (बी *)? –
'foo' को छोड़कर,' f' से शुरू होने वाली सभी चीज़ों से आप कैसे मिलान करेंगे? – Noldorin