以下按预期工作:
$ locate */synse_*_r_unseen_zs.npy
/mnt/home/dario/temp/synse_resources/language_modelling/repo_test_cadavae_5_r_val/bert/cadavae_5_r_unseen_zs.npy /mnt/home/dario/temp/synse_resources/language_modelling/repo_test_synse_10_r_val/bert/synse_10_r_unseen_zs.npy
$ locate synse_*_r_unseen_zs.npy
然而,这什么也没有返回。
这是怎么回事?
编辑:调试:
$ echo */synse_*_r_unseen_zs.npy
*/synse_*_r_unseen_zs.npy
$ echo /synse_*_r_unseen_zs.npy
/synse_*_r_unseen_zs.npy
$ echo synse_*_r_unseen_zs.npy
synse_*_r_unseen_zs.npy
答案1
定位文件时,包含标准通配符(也称为通配符模式)的定位命令会在其本地数据库中查找文件路径。/synse_*_r_unseen_zs.npy
不是文件的完整路径,因此不会返回任何内容(因为Ubuntu 中locate /synse_*_r_unseen_zs.npy
的搜索结果为空集),但是是文件的完整路径,因此会返回命令的结果。这些命令中的星号字符被定位解释为通配符。星号可以表示任意数量的字符(包括零个,换句话说,零个或多个字符)。locate synse_*_r_unseen_zs.npy
*/synse_*_r_unseen_zs.npy
locate */synse_*_r_unseen_zs.npy
答案2
正如 @steeldriver 提到的,locate
默认情况下会将*
通配符附加到搜索词的开头和结尾(locate abc
实际上也是如此locate *abc*
)除了当您自己在搜索词中添加通配符时,它不会附加或添加额外的*
通配符。
因此,虽然$ locate synse_*_r_unseen_zs.npy
由于没有*
在搜索词前面添加 a 而找不到任何内容,但$ locate *synse_*_r_unseen_zs.npy
找到了预期的
/mnt/home/dario/temp/synse_resources/language_modelling/repo_test_cadavae_5_r_val/bert/cadavae_5_r_unseen_zs.npy /mnt/home/dario/temp/synse_resources/language_modelling/repo_test_synse_10_r_val/bert/synse_10_r_unseen_zs.npy