如何保护'find'命令中的表达式不被shell解释?

ngo*_*ofo 2 bash find quoting

我想find . '! -name *.*'bashshell中运行命令。它不能按预期工作。(它应该列出当前目录中所有-name *.*为 false 的文件,即名称中没有点的文件。)相反,它打印目录中所有文件的列表,矛盾的是,以行结尾find: "! -name *.*": file or directory not found。我怀疑问题是 shell 对表达式的解释,尽管它受两个撇号 (U+0027) 字符的保护。有没有办法可靠地保护表达式无论表达式是什么,表达式?

我使用这个版本:find (GNU findutils) 4.4.2

小智 5

由于 OP 引用了 expr,'! -name *.*'它变成了find. 所以现在 find认为你传递给它的2目录名称,即,.和一个疯狂的名称! -name *.*,所以它会忠实地尝试在这两个中递归地列出所有文件/子目录。随着.到目前为止好,但到时候潜入那疯狂的目录。! -name *.*它不能,除非你拥有它。即使那样,find也不会做你想做的事。

为此,您必须在适当的地方引用:

find . ! -name '*.*'
Run Code Online (Sandbox Code Playgroud)

或者

eval find . '! -name "*.*"'
Run Code Online (Sandbox Code Playgroud)