2-isimlendirme koşullarını bulucuda nasıl birleştiririm?


94

2 -namekoşulla eşleşmeyen dosyaları aramak istiyorum . Öyle yapabilirim:

find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"

ve bu doğru bir sonuç verecektir ancak bu iki koşulu bir şekilde OR ile birleştirebilir miyim?

Yanıtlar:


46

Bunu bir olumsuzlanan kullanarak -regexda yapabilirsiniz: -

 find ./ ! -regex  '.*\(deb\|vmdk\)$'

6
Not Daha -regexaz taşınabilir -name.
jw013

145

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.


2
Yapıyorsanız -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>
Victor Sergienko

25

Çö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

6

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.


1
Bir açıklama eklemek cevabınızı daha iyi hale getirecektir.
NN

Haklısın. Bazı açıklamalar eklendi.
Francesco Turco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.