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
。