जवाबों:
आप एक उपेक्षित का उपयोग करके -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
।