![GNU find:在同一命令中使用 -o(或)和 -print0 不会给出预期结果](https://linux22.com/image/200483/GNU%20find%EF%BC%9A%E5%9C%A8%E5%90%8C%E4%B8%80%E5%91%BD%E4%BB%A4%E4%B8%AD%E4%BD%BF%E7%94%A8%20-o%EF%BC%88%E6%88%96%EF%BC%89%E5%92%8C%20-print0%20%E4%B8%8D%E4%BC%9A%E7%BB%99%E5%87%BA%E9%A2%84%E6%9C%9F%E7%BB%93%E6%9E%9C.png)
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
。