Respuestas:
También puede hacer esto usando un negado -regex: -
find ./ ! -regex '.*\(deb\|vmdk\)$'
sí tu puedes:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
Explicación de la especificación POSIX :
! expresión : negación de un primario; el operador unario NO.
( expresión ): verdadero si la expresión es verdadera.
expresión -o expresión : Alternancia de primarias; El operador OR. La segunda expresión no se evaluará si la primera expresión es verdadera.
Tenga en cuenta que los paréntesis, tanto de apertura como de cierre, están precedidos por una barra diagonal inversa ( \) para evitar la evaluación por parte del shell.
-execo cualquier otra acción en los findresultados, recuerde poner entre paréntesis \( \)los criterios completos, de lo contrario -execse aplicará solo al último -orcriterio editado. Para trabajar en todos ellos, find \( <criterion> -o <criterion> \) -exec <command>
Estuviste cerca de la solución:
find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"
Puede combinar los siguientes operadores lógicos en cualquier secuencia:
-a -and - operator AND
-o -or - operator OR
! - operator NOT
Puede usar expresiones regulares como en:
find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'
Backslash es el personaje de escape; .coincide con un solo carácter y *sirve para coincidir con el carácter anterior cero o más veces, lo que .*significa que coincide con cero o más caracteres.
-regexes menos portátil que-name.