bash - 在查找中使用 -print0 和 -o

标签 bash find

我正在使用 -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/

相关文章:

bash - 如何转义双引号内的双引号?

linux - 查找命令权限被拒绝

regex - Unix/Linux/FreeBSD 使用 Perl Regex 查找命令

bash - 删除除最后一场比赛以外的所有比赛

windows - AppEngine SDK for Go with Bash on Ubuntu on Windows

java - 如何从 Java 运行 Mac OS 终端命令(使用运行时?)

linux - 在 bash 命令中执行

linux - 如何附加冒号零,:0 onto the end of an IP address string?

linux - 对命令 'find' 找到的文件进行排序

macos - 用于在所有文件中搜索文本字符串的 Unix 命令