我正在使用 -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
我错过了什么?我尝试添加不同位置的括号对,但无济于事。
最佳答案
你缺少 parent 。请注意,您必须对它们进行转义,以便 shell 传递它们:
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
.
关于bash - 在查找中使用 -print0 和 -o,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6957259/