关于命令“find”的问题

3
在上面的Linux命令中,为什么“_*”应该被引用?

这个命令是查找以“_”开头的文件或比“while2”更新的文件,并将它们打印出来。在这里,使用引号是为了防止shell解释通配符“_*”。


一个类似的问题:https://dev59.com/iXVD5IYBdhLWcg3wU56H - Jon Ericson
3个回答

9

首先,shell会将所有未加引号的 * 扩展为本地目录中的文件名。

然后,shell使用该文件名列表运行 find 命令。

通常情况下,您不希望shell在本地目录中执行 '*' globbing。通常情况下,您需要让 find 命令在其他目录中进行文件名匹配。

在运行命令之前,shell还有其他几件事情要做。$VARIABLE 替换就是其中之一。


5

为什么应该使用 _* 进行引用?

如果不进行引用,你的shell可能会将 * 展开为当前目录中的文件。这可能不是你想要的结果。


正确的,因为find命令将会展开*通配符操作符。 - ashawley
问题在于,Shell 在 find 命令获取它之前就已经扩展了它。 - Javier

2

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

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

肯定不是你想要的。我总是引用模式,以确保 shell 不会对其进行处理。


当我使用“find . -name c”时,它找到的匹配项比“find . -name "c"”少。为什么? - MainID
你可能有一个以c开头的单个文件,而find命令会获取所有具有完全相同名称的文件,而不是以c开头的其他名称。 - Javier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接