关于命令“find”的问题

A question about command "find"

提问人:MainID 提问时间:3/14/2009 最后编辑:ephemientMainID 更新时间:3/18/2009 访问量:247

问:

find . \( -name "_*" -or -newer while2 \) -type f -print

在上面的linux命令中,为什么要引用_*?

Linux Shell 命令行

评论

0赞 Jon 'links in bio' Ericson 3/18/2009
类似的问题:<stackoverflow.com/questions/18836/why-doesn't-find-find-anything>

答:

5赞 John Feminella 3/14/2009 #1

为什么 _* 应该被引用?

如果不是,您的 shell 可能会展开 要替换为当前目录中的文件。这可能不是你想要的。*

评论

0赞 ashawley 3/15/2009
没错,因为 find 命令将展开 * glob 运算符。
0赞 Javier 3/15/2009
问题在于 shell 在 find 命令获取它之前将其展开
9赞 S.Lott 3/14/2009 #2

首先,shell 会展开所有不带引号的 * 以匹配本地目录中的文件名。

之后,shell 将运行带有该文件名列表的命令。find

通常,您不希望 shell 在本地目录中执行“*”通配。通常,您使用 find 命令在其他目录中执行文件名匹配。

在运行命令之前,shell 还会执行其他几项操作。$VARIABLE替代品就是其中之一。

2赞 Javier 3/14/2009 #3

如果你不引用它,shell (bash?) 会尝试扩展。如果当前目录上有任何以“”开头的文件,则会得到如下内容:_

find . \(-name _somefile _someother _file3 .... -or -newer while2 \) -type f -print

当然不是你想要的。我总是引用模式,只是为了确保 shell 不会弄乱它们

评论

0赞 MainID 3/15/2009
当我使用查找 .-name c*,它找到的匹配项比找到的少。-名称“c*”。为什么?
0赞 Javier 3/15/2009
可能您有一个以 C 开头的单个文件,并且 find 命令会获取所有具有完全相同名称的文件,而不是以 C 开头的其他名称