Yanıtlar:
Bunu bir olumsuzlanan kullanarak -regex
da 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.
-exec
veya find
sonuçlar üzerinde başka bir işlem yapıyorsanız \( \)
, tüm kriterleri parantez içinde tutmayı unutmayın , aksi takdirde -exec
yalnızca son -or
kritere 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.
-regex
az taşınabilir-name
.