Saya telah membaca halaman manual dan referensi lain, tetapi saya masih bingung dengan perilaku menemukan -print0
opsi.
-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).
Perintah pertama:
$ 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
Perintah kedua:
$ 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
Saya dapat melihat bahwa nama file dari perintah kedua dipisahkan dengan karakter null, tetapi mengapa saya mendapatkan 3 output sebagai lawan dari 5 di atas?
Jawaban:
Contoh pertama Anda
tidak setara dengan
Ini setara dengan
Saat ekspresi Anda mengandung tindakan apa pun selain
-purge
, cetakan implisit tidak lagi ditambahkan. Kamu inginAlasan Anda hanya mendapatkan 3 nama file adalah itu adalah yang cocok dengan kondisi kedua Anda (yang memiliki tindakan). Apa yang Anda ketik benar-benar berarti
Yang mudah-mudahan memperjelas mengapa hanya 1 sisi yang mencetak apa saja.
sumber
find /some/path -iregex '.*intro.*\.jpe?g'
... dan karena sekarang hanya ada satu ekspresi yang akan menghindari masalah yang disorot oleh cjm.