উত্তর:
আপনি এটিকে অবহেলা করেও এটি করতে পারেন -regex
: -
find ./ ! -regex '.*\(deb\|vmdk\)$'
হ্যা, তুমি পারো:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
পসিক্স স্পেক থেকে ব্যাখ্যা :
! অভিব্যক্তি : একটি প্রাথমিক নেতিবাচক; অপরিচিত অপারেটর।
( অভিব্যক্তি ): অভিব্যক্তিটি সত্য হলে সত্য।
এক্সপ্রেশন -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
।