通过 find 进行的匹配中该模式出现在哪里?

通过 find 进行的匹配中该模式出现在哪里?

的联机帮助页find说:

-姓名

文件名的基础(删除前导目录的路径)

$ find ~ -name bookmark | less

不返回任何内容,同时

$ find ~ -name bookmarks | less
./.streamtuner/cache/bookmarks
./.config/zathura/bookmarks
./.elinks/bookmarks

有三场比赛。

为什么第一个没有第二个的匹配项?

如果我想找到那些名称包含 的文件,无论文件名中bookmark的位置如何,我应该如何使用?谢谢。bookmarkfind

答案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与命令行中文件/目录名称中的通配符完全相同。 * 是任意字符串并且 ?是任意字符。

相关内容