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.
-exec
o cualquier otra acción en los find
resultados, recuerde poner entre paréntesis \( \)
los criterios completos, de lo contrario -exec
se aplicará solo al último -or
criterio 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.
-regex
es menos portátil que-name
.