文件名匹配模式中的问号是什么意思?

文件名匹配模式中的问号是什么意思?

这个命令中的问号是什么意思?

find . –type d –name "?d*" –print

我尝试在没有它的情况下运行它,但没有注意到任何变化。

答案1

问号与文件名中的一个字符完全匹配。所以,

find -name "c?t"

将匹配catandcot但不匹配coator ct

就其价值而言,这是一种非常常见的文件名匹配约定,并且可以在各种命令行界面上下文中使用,甚至可以在 Windows 的cmd.

除非没有任何匹配,否则删除问号应该会有所不同。

答案2

"?d*"in 中的模式find . -type d -name "?d*" -print由 find 解释(如 depquid 正确说明的那样),而不是由 shell 解释,并且将匹配具有第二个字符的所有目录,d即使第一个字符是.

例如,如果存在目录.dadadaxd,则 find 命令将打印

./.dad
./ada
./xd

而 shell 命令echo ?d*(其中模式 ?d* 由 shell 解释)至少会打印(将会有任何与该模式匹配的文件的名称)

ada xd

另一方面,如果不存在带有第二个字符的目录,d则 find 不会产生任何输出,与打印的 shell 命令相反

?d*

答案3

问号被 shell 识别为单个字符。在这种情况下,名称被指定为目录名第二个字符“d”的任何目录,后跟任何其他字符。

find没有输出任何内容,因为没有与 -name 规范匹配的目录名称。

答案4

find . -name '?*.*'将匹配“某个(一个)事物”然后“任何事物”“点”“任何事物”

笔记:

  1. 这些是“查找”搜索模式,不是bash glob 扩展,而不是正则表达式。
  2. “任何事”可能包括“什么都没有”

因此,上面的内容将匹配任何 name.extension 和 .name.extension,但不会匹配没有名称的“.extension”(或没有扩展名的名称)。

问题中的“?d*”模式将匹配以任何单个字符开头,后跟“d”的任何名称。

相关内容