Bulduğunuzda print0 seçeneği ile daha az çıktınız mı var?


10

Man sayfasını ve diğer referansları okudum, ancak hala -print0seçenekle bulma davranışından kafam karıştı .

-print0      This primary always evaluates to true.  It prints the pathname of
             the current file to standard output, followed by an ASCII NUL
             character (character code 0).

İlk komut:

$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null
/some/path//asdf199Intro-5kqlw.jpeg
/some/path/199intro-2jjaj.JPEG
/some/path/199intro-3.jpg
/some/path/wuer199intro-4.JPG
/some/path/xbzf199INTRO-1.jpg

İkinci komut:

$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null -print0
/some/path/136intro-3.jpg/some/path/wuer136intro-4.JPG/some/path/xbzf136INTRO-1.jpg

İkinci komuttaki dosya adlarının boş karakter ayrıldığını görebiliyorum, ancak neden yukarıda 5 yerine 3 çıktı alıyorum?


1
Teknik olarak, boş bırakılırlar , boş bırakılmazlar. (Her yol
adından

Yanıtlar:


12

İlk örneğiniz

 find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg"

eşdeğer değil

 find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" -print

Eşdeğerdir

 find /some/path/ \( -iname "*intro*jpeg" -o -iname "*intro*jpg" \) -print

İfadeniz dışında herhangi bir işlem içerdiğinde -purge, örtük yazdırma artık eklenmez. İstediğiniz

find /some/path/ \( -iname "*intro*jpeg" -o -iname "*intro*jpg" \) -print0 2> /dev/null

Yalnızca 3 dosya adı almanızın nedeni, bunların ikinci koşulunuzla (bir eylemi olan) eşleşenler olmasıdır. Gerçekten yazdığınız şey

find /some/path/ \( -iname "*intro*jpeg" \) -o \( -iname "*intro*jpg" -print0 \)

Umarım neden sadece 1 taraf bir şey yazdırır.


Bilginize bul ifadesini basitleştirebilirsiniz: find /some/path -iregex '.*intro.*\.jpe?g'... ve şimdi sadece bir ifade olduğundan cjm tarafından vurgulanan sorunu önleyecektir.
cas

@cjm parantezler günümü kurtardı, senaryomda 0 günlük bir hatayı düzelttim !!!
leesei

@mltsy kafa karıştırıcı değil, düzenli ifadesi ;-).
leesei
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.