我想find . '! -name *.*'
在bash
shell 中运行该命令。它没有按预期工作。 (它应该列出当前目录中为-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 '*.*'