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

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

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

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

答案1

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

为此,您必须在适当的位置引用:

find . ! -name '*.*'

或者

eval find . '! -name "*.*"'

答案2

尝试仅在表达式两边加上单引号。

find . ! -name '*.*'

相关内容