这个命令中的问号是什么意思?
find . –type d –name "?d*" –print
我尝试在没有它的情况下运行它,但没有注意到任何变化。
答案1
问号与文件名中的一个字符完全匹配。所以,
find -name "c?t"
将匹配cat
andcot
但不匹配coat
or ct
。
就其价值而言,这是一种非常常见的文件名匹配约定,并且可以在各种命令行界面上下文中使用,甚至可以在 Windows 的cmd
.
除非没有任何匹配,否则删除问号应该会有所不同。
答案2
"?d*"
in 中的模式find . -type d -name "?d*" -print
由 find 解释(如 depquid 正确说明的那样),而不是由 shell 解释,并且将匹配具有第二个字符的所有目录,d
即使第一个字符是.
例如,如果存在目录.dad
、ada
和xd
,则 find 命令将打印
./.dad
./ada
./xd
而 shell 命令echo ?d*
(其中模式 ?d* 由 shell 解释)至少会打印(将会有任何与该模式匹配的文件的名称)
ada xd
另一方面,如果不存在带有第二个字符的目录,d
则 find 不会产生任何输出,与打印的 shell 命令相反
?d*
答案3
问号被 shell 识别为单个字符。在这种情况下,名称被指定为目录名第二个字符“d”的任何目录,后跟任何其他字符。
find
没有输出任何内容,因为没有与 -name 规范匹配的目录名称。
答案4
find . -name '?*.*'
将匹配“某个(一个)事物”然后“任何事物”“点”“任何事物”
笔记:
- 这些是“查找”搜索模式,不是bash glob 扩展,而不是正则表达式。
- “任何事”可能包括“什么都没有”
因此,上面的内容将匹配任何 name.extension 和 .name.extension,但不会匹配没有名称的“.extension”(或没有扩展名的名称)。
问题中的“?d*”模式将匹配以任何单个字符开头,后跟“d”的任何名称。