的联机帮助页find
说:
-姓名
文件名的基础(删除前导目录的路径)
$ find ~ -name bookmark | less
不返回任何内容,同时
$ find ~ -name bookmarks | less
./.streamtuner/cache/bookmarks
./.config/zathura/bookmarks
./.elinks/bookmarks
有三场比赛。
为什么第一个没有第二个的匹配项?
如果我想找到那些名称包含 的文件,无论文件名中bookmark
的位置如何,我应该如何使用?谢谢。bookmark
find
答案1
给出的模式-name
必须匹配全部的基本文件名。该模式的行为-name
定义为:
如果当前路径名的基本名与模式匹配,则主项应评估为 true
这意味着当整个基本名称与图案你给了。您可以将模式视为基本上类似于 shell glob:您可以在其中使用*
、?
和[...]
模式,模式的开头和结尾与字符串的开头和结尾对齐。
所以你的命令:
find ~ -name bookmarks
查找名为“bookmarks”的文件,因为这是整个文件名,但是:
find ~ -name bookmark
只会找到名为“bookmark”的文件,因为模式中没有通配符。
要匹配名为bookmark
和 的文件bookmarks
,您可以使用:
find ~ -name 'bookmark*'
所以如果你想找到
那些名称包含书签的文件,无论书签在文件名中的位置如何
你可以使用:
find ~ -name '*bookmark*'
匹配名称包含任意数量字符的文件,然后是bookmark
,然后是任意数量的字符。
答案2
-name
命令中参数的参数find
与命令行中文件/目录名称中的通配符完全相同。 * 是任意字符串并且 ?是任意字符。