Відповіді:
так, ти можеш:
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.