Risposte:
si, puoi:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
Spiegazione dalle specifiche POSIX :
! espressione : negazione di una primaria; l'operatore NOT unario.
( espressione ): vero se espressione è vera.
espressione -o espressione : alternanza di primarie; l'operatore OR. La seconda espressione non deve essere valutata se la prima espressione è vera.
Si noti che la parentesi, sia in apertura che in chiusura, è preceduta da una barra rovesciata ( \
) per impedire la valutazione da parte della shell.
-exec
o qualsiasi altra azione sui find
risultati, ricorda di selezionare \( \)
tutti i criteri, altrimenti -exec
si applicherà solo al -or
criterio ultimo . Per lavorare su tutti, parentesi:find \( <criterion> -o <criterion> \) -exec <command>
Eri vicino alla soluzione:
find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"
È possibile combinare i seguenti operatori logici in qualsiasi sequenza:
-a -and - operator AND
-o -or - operator OR
! - operator NOT
Puoi usare espressioni regolari come in:
find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'
Backslash è il personaggio di escape; .
corrisponde a un singolo carattere e *
serve per abbinare il carattere precedente zero o più volte, quindi .*
significa che corrisponde a zero o più caratteri.
-regex
è meno portatile di-name
.