`Ls` मिलान पैटर्न में एक निर्देशिका को छोड़ दें


13

मैं lsउन .pngफ़ाइलों को हटाने की कोशिश कर रहा हूं जिनके अंदर फाइलें हैं (पुनरावृत्ति की कोई आवश्यकता नहीं है, हालांकि यह अतिरिक्त उपयोगी होगा), एक को बाहर करें। एक निर्देशिका को छोड़ दें

ls */*.png

ठीक काम करता है।

ls (^one)*/*.png

रिटर्न कोई रोक नहीं है। मैं इसे कैसे प्राप्त करूं?

मैं अंधा हूं और इसे पाइप espeakकर रहा हूं, इसलिए मैं केवल अभी के लिए स्टडआउट सुन सकता हूं।


आप किस खोल का उपयोग कर रहे हैं? आपका पैटर्न एक zsh पैटर्न की तरह दिखता है, हालांकि यह उपयोगी नहीं है क्योंकि यह बाहर नहीं होगा one(सही पैटर्न होगा ^one/*.png), यह सब कुछ प्रिंट करेगा।
गिलेस एसओ- बुराई को रोकना '

जवाबों:


16

विकल्प 1 - बस का उपयोग करना ls:
विस्तारित बैश ग्लबिंग के साथ ( shopt -s extglob) आप कर सकते हैं:

ls !(one*)/*.png


विकल्प 2 - संयोजन lsऔर grep:

आप के lsसाथ गठबंधन कर सकते हैंgrep -v

  • जैसे ls */*.png | grep -v "one/"


विकल्प 3 - (सर्वश्रेष्ठ IMO) लेकिन उपयोग findनहीं करता है ls:

का उपयोग करते हुए सभी उपनिर्देशिकाओं की पुनरावर्ती खोज के लिए find

find . -type f -name "*.png" -not -path "*/one/*"


उपरोक्त सभी वन-लाइनर्स .pngकिसी भी पथ मिलान को फ़िल्टर करते समय फ़ाइलों के साथ निर्देशिकाओं को सूचीबद्ध करेंगे one/; केवल विकल्प 3 यह पुनरावर्ती रूप से करेगा।


findकहने की जरूरत नहीं है -path "*/one/*"या -path "./one/*"?
जी-मैन का कहना है कि 'मोनिका'

@ जी-मैन यू आर बिलकुल सही। ऊपर संपादित किया गया।
टॉक्सिफा

कि अभी भी मैच नहीं होगा ./phone/handset.png?
जी-मैन ने कहा कि 'पुनः स्थापित मोनिका'

@ जी-मैन .pngनामक निर्देशिका में मिलान के साथ क्या गलत है phone? मुझे लगा कि हम सिर्फ बाहर करने की कोशिश कर रहे हैं one?
टॉक्सिफा

1
ठीक है, चूंकि आप इसे कनेक्शन के साथ उपयोग कर रहे हैं -not, इसका मतलब है कि यह findएक निर्देशिका में फ़ाइलों को बाहर करने का कारण बनता है phone
जी-मैन का कहना है कि 'मोनिका'

6

में zsh , डाल setopt extended_globअपने में ~/.zshrc। फिर आप वाइल्डकार्ड पैटर्न ^one का उपयोग कर सकते हैं जिसे निर्देशिका कहा जाता है one

ls ^one/*.png

यदि आप उपनिर्देशिकाओं में **/पुनरावृत्ति करना चाहते हैं , तो पुनरावर्ती ग्लोबिंग के लिए उपयोग करें । oneटापवेल पर बुलाई गई निर्देशिका को बाहर करने के लिए , साथ ही साथ अचंभे को हटाने के लिए:

ls ^one/**/*.png

नामक एक उपनिर्देशिका में फ़ाइलों को बाहर करने के लिए one, लेकिन इसके उपनिर्देशिकाओं में फाइलें नहीं:

ls **/^one/*.png

oneकिसी भी स्तर पर कही जाने वाली उपनिर्देशिका के तहत फ़ाइलों को बाहर करने के लिए , #परिचालक के साथ दोहराव पैटर्न का उपयोग करें :

ls (^one/)#/*.png
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.