GNU find:在同一命令中使用 -o(或)和 -print0 不会给出预期结果

GNU find:在同一命令中使用 -o(或)和 -print0 不会给出预期结果

TL;dr:如何正确地将-print0选项find-o选项结合起来以匹配多个模式? (用例是传入xargs -0

例子:

find . -print0 -name "File*.dat" -o -name "Data*.txt"
find . -print0 -name "File*.dat" -o -print0 -name "Data*.txt"

这两个都返回每个文件在目录中。

find . -name "File*.dat" -o -name "Data*.txt" -print0

这返回仅有的与第二个模式 ( Data*.txt) 匹配的文件。

我怎样才能正确地做到这一点,为什么会发生这种情况?

答案1

您有引用问题和分组问题。使用“ "”邀请 shell 进行通配符匹配。如果有匹配的文件或在当前目录中,则通配符将被替换。使用“ '”代替。
分组是通过括号“ ()”完成的,需要对它进行 shell 转义。
你的命令应该是。

find . \( -name 'File*.dat' -o -name 'Data*.txt' \) -print0

man find

相关内容