Ответы:
Да, ты можешь:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
Объяснение из спецификации POSIX :
! выражение : отрицание предмета; унарный оператор НЕ.
( выражение ): True, если выражение верно.
выражение -о выражение : чередование праймериз; оператор ИЛИ. Второе выражение не должно оцениваться, если первое выражение истинно.
Обратите внимание, что скобки, как открывающие, так и закрывающие, имеют префикс обратной косой черты ( \
), чтобы предотвратить оценку оболочкой.
-exec
или выполняете какие-либо другие действия с find
результатами, не забудьте указать \( \)
в скобках весь критерий, иначе он -exec
будет применяться только к последнему -or
критерию. Чтобы поработать над всеми из них, заключите их в скобки:find \( <criterion> -o <criterion> \) -exec <command>
Вы можете использовать регулярные выражения как в:
find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'
Обратная косая черта является escape-символом; .
соответствует одному символу и *
служит для совпадения с предыдущим символом ноль или более раз, поэтому .*
означает совпадение с нолем или более символов.
-regex
это менее портативный, чем-name
.