Yanıtlar:
Bunu bir olumsuzlanan kullanarak -regexda yapabilirsiniz: -
find ./ ! -regex '.*\(deb\|vmdk\)$'
Evet yapabilirsin:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
POSIX özelliklerinden açıklama :
! ifade : Bir birincil ihmal; unary NOT işleci.
( expression ): İfade doğru ise doğru.
ifade -o ifade : Primerlerin değişmesi; VEYA operatörü. İlk ifade doğruysa, ikinci ifade değerlendirilmez.
Hem açma hem de kapama parantezinin \kabuk tarafından değerlendirmeyi önlemek için ters eğik çizgi ( ) ile öneki yapıldığını unutmayın.
-execveya findsonuçlar üzerinde başka bir işlem yapıyorsanız \( \), tüm kriterleri parantez içinde tutmayı unutmayın , aksi takdirde -execyalnızca son -orkritere uygulanır. Hepsi üzerinde çalışmak için, parantez içinde onları:find \( <criterion> -o <criterion> \) -exec <command>
Çözüme yakındın:
find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"
Aşağıdaki mantık işleçlerini herhangi bir sırayla birleştirebilirsiniz:
-a -and - operator AND
-o -or - operator OR
! - operator NOT
Düzenli ifadeleri aşağıdaki gibi kullanabilirsiniz:
find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'
Ters eğik çizgi kaçış karakteridir; .tek bir karakterle *eşleşir ve önceki karakterle sıfır veya daha çok kez .*eşleşmeyi sağlar ; yani sıfır veya daha fazla karakterle eşleşir.
-regexaz taşınabilir-name.