我使用-print0来修改find的输出以使用NULL终结符而不是换行符。但是,当使用find的-o(OR)函数时,我无法使其工作。
这样可以正常工作,它打印出一个以换行符分隔的文件列表,这些文件不属于用户'pieter'或不属于'www-data'组所有:
find . ! -user pieter -o ! -group www-data
但是当我将-print0附加到此时,我再也没有输出:
find . ! -user pieter -o ! -group www-data -print0
然而这很好用:
find . ! -user pieter -print0
我错过了什么?我已经尝试添加各种括号括号,但无济于事。
答案 0 :(得分:8)
find . \( ! -user pieter -o ! -group www-data \) -print0
您可以找到有关查找on its man page的更多信息,尤其是在示例部分。
如果您想知道为什么这是必要的,那是因为order of operations。 find中的每个表达式都返回true或false。如果您没有在表达式之间放置显式运算符(-a
,-o
或,
),则假定为-a
。
因此,您的原始命令等同于find . ! -user pieter -o ! -group www-data -a -print0
,它仅评估用户print0
拥有的文件pieter
,而不评估组www-data
。