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