Você também pode fazer isso usando um -regex
negado: -
find ./ ! -regex '.*\(deb\|vmdk\)$'
Eu gostaria de pesquisar arquivos que não correspondam a 2 -name
conditions. Eu posso fazer assim:
find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"
e isso produzirá resultado adequado, mas posso juntar essas duas condições com OR de alguma forma?
sim, você pode:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
Explicação da especificação POSIX :
! expression : Negation of a primary; the unary NOT operator.
( expression ): True if expression is true.
expression -o expression: Alternation of primaries; the OR operator. The second expression shall not be evaluated if the first expression is true.
Observe que os parênteses, abertura e fechamento, são prefixados por uma barra invertida ( \
) para impedir a avaliação pelo shell.
Você estava perto da solução:
find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"
Você pode combinar os seguintes operadores lógicos em qualquer sequência:
-a -and - operator AND
-o -or - operator OR
! - operator NOT
Você pode usar expressões regulares como em:
find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'
Barra invertida é o caractere de escape; .
corresponde a um único caractere e *
serve para corresponder ao caractere anterior zero ou mais vezes, então .*
significa corresponder a zero ou mais caracteres.