2011-08-05 30 views
5

Yeni satırlar yerine NULL sonlandırıcıları kullanmak için bulmanın çıktısını değiştirmek için -print0 kullanıyorum. Ancak bunu bul'ın -o (OR) işlevini kullanırken işe yaramayacağım.-0 ile -0 ile -0'ı bulmak bulmak için

Bu iyi çalışır

, ya grup 'www-data' ait kullanıcı 'pieter' ait YA değil edilmeyen dosyaların bir yeni satır ayrılmış bir liste yazdırır:

find . ! -user pieter -o ! -group www-data 

Ama eklemek zaman -print0 buna ben artık hiçbir çıktı alın:

find . ! -user pieter -o ! -group www-data -print0 

Ancak bu çalışıyor:

find . ! -user pieter -print0 

ne m am issing? Parantez çiftinin çeşitli yerleşimlerini eklemeyi denedim ama boşuna.

+0

Bunun işe yarayacağını, ancak test edilmediğini tahmin ediyorum: 'bulmak. \ (! -kullanıcı pieter -o! -grubu www-data \) -print0' –

cevap

7

Parensleri kaçırıyorsunuz. Eğer kabuk onları geçer yüzden onları kaçmak zorunda Not: Özellikle Örnekler bölümünde, on its man page bulmak konusunda daha fazla bilgi bulabilirsiniz

find . \(! -user pieter -o ! -group www-data \) -print0 

.

Bunun nedenini merak ediyorsanız, bunun nedeni order of operations. Bulgudaki her ifade doğru veya yanlış olarak döner. İfadeler arasında açık bir operatör (-a, -o veya ,) koyarsanız, -a kabul edilir.

Yani, orijinal komut sadece kullanıcı pieter ait olan dosyalar üzerinde print0 değerlendirmek değil, grup www-data, hangi find . ! -user pieter -o ! -group www-data -a -print0 eşdeğerdir.

+0

Harika! Bu çalışıyor. Şimdi mantıklı, çözümlere bakıyorum, koşulları birlikte gruplandırıyorum. – pfrenssen