以下は意図したとおりに動作しています:
$ 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
ファイルを検索する場合、標準のワイルドカード (グロビング パターンとも呼ばれます) を含むlocate コマンドは、ローカル データベース内のファイルへのパスを検索します。は/synse_*_r_unseen_zs.npy
ファイルへの完全なパスではないため、何も返しません ( Ubuntu でのlocate /synse_*_r_unseen_zs.npy
の検索結果は空のセットであるため)。ただし、はファイルへの完全なパスであるため、コマンドの結果を返します。これらのコマンドのアスタリスク文字は、locate によってワイルドカードとして解釈されます。アスタリスクは任意の数の文字 (0 を含む、つまり 0 文字以上) を表すことができます。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