find 上的 print0 选项输出较少?

find 上的 print0 选项输出较少?

我已阅读手册页和其他参考资料,但我仍然对 find with 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

第二条命令:

$ 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

我可以看到第二个命令的文件名以空字符分隔,但为什么我得到 3 个输出而不是上面的 5 个输出?

答案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 个文件名的原因是这些文件名与您的第​​二个条件(具有操作的那个)匹配。您输入的内容的真正含义

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

希望这能清楚地说明为什么只有一侧打印任何内容。

相关内容