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