zsh: एक पैटर्न से फ़ाइलों को छोड़कर


18

कहो कि मेरे पास निम्न फाइलें हैं:

|-- bar
`-- foo
    |-- type_A_1
    |-- type_A_2
    |-- type_B_1
    |-- type_B_2
    |-- type_B_xx
    |-- type_B_xx
    `-- something_else

मैंने सोचा था कि निम्नलिखित आदेश

print -l foo/*~{type_B*}

मुद्रित होगा सब कुछ के तहत foo छोड़कर चीजें हैं जो के साथ शुरू type_Bहै, लेकिन यह नहीं है, इसके बजाय यह सब कुछ foo के तहत प्रिंट करता है:

foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else

मैंने भी कोशिश की print -l foo/*~type_Bऔर वही बात मिली।

अपवाद वाइल्डकार्ड ~zsh में कैसे काम करता है ?

जवाबों:


10

आपको निर्देशिका को अपवाद में शामिल करने की आवश्यकता है: print -l foo/*~foo/type_A*या print -l foo/*~{foo/type_A*}

यदि आप चाहें, तो आप डायरेक्टरी को वाइल्डकार्ड से बदल सकते हैं: print -l foo/*~*/type_A*


धन्यवाद! दूसरे पैटर्न के बारे में, क्या आपको यह समझाने में दिक्कत होती है कि पैटर्न कैसे foo/*~*/type_A*काम करता है? क्या दूसरा कार्यशील निर्देशिका के तहत प्रत्येक फ़ोल्डर में *विस्तारित होता है , या क्या यह केवल विस्तार करने के लिए पर्याप्त स्मार्ट है ? foo
अमिलियो वाज़केज़-रीना

@roseck क्योंकि यह वास्तव में तेज़ लगता है (उदाहरण के लिए जब आप निर्देशिका print *~**/*में चलते /हैं), तो मुझे लगता है कि यह पहले पैटर्न का विस्तार करता है और फिर उन सभी मैचों को हटा देता है जो अपवर्जन पैटर्न में फिट होते हैं।
जोफेल

2
@roseck ~विशुद्ध रूप से बनावट है, जो पहले ~फैलता है जैसा कि हमेशा होता है, फिर स्ट्रिप्स के बाद का हिस्सा मेल खाता है। @Jofel एक बेहतर परीक्षा होगीprint /**/*~* : आप देख सकते हैं कि यह पूरे पेड़ का पता , भले ही यह कुछ भी नहीं मुद्रण को समाप्त करता हो।
गाइल्स 'एसओ- बुराई को रोकना'

मुझे लगा कि वह type_B को बाहर करना चाहते हैं लेकिन type_A को शामिल करते हैं।
सिस्टमोविच 18

सही उत्तर नीचे है
आर्यनिन्द

30

^EXTENDED_GLOB चालू होने पर zsh के पास ग्लोब ऑपरेटर होता है। यह आपकी बताई गई स्थिति के लिए एकदम सही है:

setopt extendedglob
print -rl foo/^type_A*

इसका अर्थ है "कुछ भी मिलान करें, जो निम्न पैटर्न से मेल खाता है" के अलावा, लेकिन इसका प्रभाव पैटर्न के हिस्से तक सीमित होता है, या पैटर्न की शुरुआत और पहली स्लैश के बीच, या (इस मामले में) अंतिम के बीच स्लैश और पैटर्न का अंत।

आप वर्तमान में सक्षम किए गए zsh विकल्पों को देख सकते हैं :

setopt

और EXTENDED_GLOB को इसके साथ अक्षम करें:

unsetopt extendedglob
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.