जवाबों:
आप एक उपेक्षित का उपयोग करके -regexभी ऐसा कर सकते हैं : -
find ./ ! -regex '.*\(deb\|vmdk\)$'
हाँ तुम कर सकते हो:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
POSIX कल्पना से स्पष्टीकरण :
! अभिव्यक्ति : एक प्राथमिक की उपेक्षा; अपरिपक्व नहीं ऑपरेटर।
( अभिव्यक्ति ): सच है अगर अभिव्यक्ति सच है।
अभिव्यक्ति -o अभिव्यक्ति : प्राइमरी का विकल्प; या ऑपरेटर। पहली अभिव्यक्ति के सत्य होने पर दूसरी अभिव्यक्ति का मूल्यांकन नहीं किया जाएगा।
ध्यान दें कि खोलना और \मूल्यांकन दोनों, खोल द्वारा मूल्यांकन को रोकने के लिए एक बैकस्लैश ( ) द्वारा उपसर्ग किए जाते हैं ।
-execपर या कोई अन्य कार्रवाई कर रहे हैं find, \( \)तो पूरे मानदंड को याद रखें , अन्यथा -execकेवल अंतिम- -orनिर्धारित मानदंड पर लागू होगा । उन सभी पर काम करने के लिए, उन पर ध्यान दें:find \( <criterion> -o <criterion> \) -exec <command>
आप समाधान के करीब थे:
find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"
आप किसी भी क्रम में निम्नलिखित तर्क ऑपरेटरों को जोड़ सकते हैं:
-a -and - operator AND
-o -or - operator OR
! - operator NOT
आप निम्न के रूप में नियमित अभिव्यक्ति का उपयोग कर सकते हैं:
find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'
बैकस्लैश पलायन चरित्र है; .किसी एकल वर्ण से मेल खाता है, और *पिछले चरित्र को शून्य या अधिक बार मेल करने का कार्य करता है, इसलिए .*इसका अर्थ शून्य या अधिक वर्णों से मेल खाता है।
-regexकी तुलना में कम पोर्टेबल है-name।