Antworten:
Sie können dies auch mit einem negierten tun -regex
:
find ./ ! -regex '.*\(deb\|vmdk\)$'
Ja, du kannst:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
Erklärung aus der POSIX-Spezifikation :
! Ausdruck : Negation eines Primären; der unäre NOT-Operator.
( Ausdruck ): Wahr, wenn Ausdruck wahr ist.
Ausdruck -o Ausdruck : Wechsel der Vorwahlen; der OP-Operator. Der zweite Ausdruck wird nicht bewertet, wenn der erste Ausdruck wahr ist.
Beachten Sie, dass Klammern sowohl beim Öffnen als auch beim Schließen ein Backslash ( \
) vorangestellt ist, um eine Auswertung durch die Shell zu verhindern.
-exec
oder andere Maßnahmen in Bezug auf die find
Ergebnisse ergreifen. \( \)
Andernfalls -exec
wird nur das zuletzt festgelegte -or
Kriterium berücksichtigt. Um an allen zu arbeiten, müssen Sie find \( <criterion> -o <criterion> \) -exec <command>
Sie waren der Lösung nahe:
find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"
Sie können folgende Verknüpfungsoperatoren in beliebiger Reihenfolge kombinieren:
-a -and - operator AND
-o -or - operator OR
! - operator NOT
Sie können reguläre Ausdrücke wie folgt verwenden:
find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'
Backslash ist das Escape-Zeichen. .
Stimmt mit einem einzelnen Zeichen *
überein und dient dazu, das vorherige Zeichen null oder mehrmals übereinzustimmen. Das .*
bedeutet , dass null oder mehr Zeichen übereinstimmen.
-regex
weniger portabel als-name
.