通配符和双引号用find -name命令

双引号(和单引号)抑制通配符扩展是不是真的? 如果是这样,那么为什么以下

find -name "d*"

不适合通配符* ? 也就是说,上述命令的输出都是以字母d开头的文件和目录的path,就好像有一些扩展正在进行。 我期待的通配符被压制,所以它只会输出文件名字面意思d*path,但它不是。

这是否意味着双引号在某些情况下有例外?

谢谢!

引号通过shell禁止通配符扩展,这意味着在这种情况下, find -name的参数将是一个文字d*

如果没有引号,shell将是扩展通配符的那个,在这种情况下, d*将扩展到当前目录中以d开头的所有名称的列表,或者在没有这种文件的情况下扩展到d*

名称搜索标准使用相同的语法,然后shell球体作为参数。 在这种情况下,该模式旨在由find来解释,而不是由shell来解释,因此需要引用引号。

要搜索文字* ,可以将其括在方括号中:

 find -name "d[*]" 

或者用反斜杠转义它:

 find -name 'd\*' 

在* NIX平台上,即使在被调用程序执行之前,shell也负责解释和扩展文件名通配符。 程序将只能看到扩展的文件名。

你可以通过禁止通配符扩展

 $ # Using single or double quotes around it $ find . -name '*' $ # Escaping it $ find . -name \* $ # Or disable the glob expansion (noglob) $ set -f $ find . -name * 

如果find它的名称参数需要模式

  -name pattern Base of file name (the path with the leading directories removed) matches shell pattern pattern... Don't forget to enclose the pattern in quotes in order to protect it from expansion by the shell. 

所以,即使通配符没有被shell扩展, find也会在搜索匹配的文件时使用你的表达式。

为了澄清壳体膨胀,

方式1:使用这些模式与echo命令作为参数。

方法2 :在执行find命令之前,执行set -x命令来查看哪些参数传递给命令“find”(或任何其他命令)。