マニュアルページやその他の参考資料を読みましたが、findとoptionの動作についてはまだ混乱しています-print0
。
-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).
最初のコマンド:
$ 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
2番目のコマンド:
$ 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
2番目のコマンドのファイル名がNULL文字で区切られているのがわかりますが、なぜ上記の5つではなく3つの出力が表示されますか?
答え1
あなたの最初の例
find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg"
等しくない
find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" -print
それは等しい
find /some/path/ \( -iname "*intro*jpeg" -o -iname "*intro*jpg" \) -print
式に以外のジョブが含まれている場合、暗黙的な-purge
印刷は追加されなくなります。欲しい
find /some/path/ \( -iname "*intro*jpeg" -o -iname "*intro*jpg" \) -print0 2> /dev/null
3つのファイル名のみを取得するのは、そのファイル名が2番目の条件(作業を含む条件)と一致するためです。入力した内容の真の意味
find /some/path/ \( -iname "*intro*jpeg" \) -o \( -iname "*intro*jpg" -print0 \)
これにより、片面にのみ印刷される理由が明らかになることを願っています。