からman locate
:
If --regex is not specified, PATTERNs can contain globbing characters. If any
PATTERN contains no globbing characters, locate behaves as if the pattern
were \*PATTERN*.
したがって、発行するとき
locate rhyth*
locate
このパターンに一致するファイルがないため、見つかりません: グロブ文字があるため、locate は実際に一致しようとします (正規表現で):^rhyth.*
そして明らかにそのような一致はありません (完全なパスで)。
あなたの場合、次を試すことができます:
locate "/home/sh/.local/share/rhythmbox/rhyth*"
また
locate '/rhyth' # equivalent to locate '*/rhyth*'
しかし、それはあまり良くありませんね。
次に、 の最初のオプションを見てくださいman locate
。
-b, --basename
Match only the base name against the specified patterns. This
is the opposite of --wholename.
万歳!この線:
locate -b "rhyth*"
あなたが望むように動作するはずです:ベース名が一致するファイルを見つけます(正規表現で):^rhyth.*
お役に立てれば。
編集。コメントに答えるには: folder 内のlocate
すべてのjpgファイルが/home/sh/music/
必要な場合は、次のようにします。
locate '/home/sh/music/*.jpg'
(いいえ-b
、うまくいきません)。これにより、フォルダーとそのサブフォルダーにあるすべてのjpgファイルが表示されることに注意してください。大文字のJPG拡張子を持つものも見つけることができるように、フラグ (大文字と小文字を区別しない)を使用したくなるかもしれません。/home/sh/music
-i
locate -i '/home/sh/music/*.jpg'
編集 2.どこかで言うと、このlocate
コマンドはデータベースで動作しますfind
。最近のファイルがある場合、それらはlocate
d にならず、一部のファイルを削除してもlocate
d のままである可能性があります。この場合(他のコメントの目的である可能性があります)、locate
のデータベースを更新する必要があります:ルートとして、次を発行します:
updatedb
警告。コマンドupdatedb
が完了するまでに数分かかる場合がありますが、心配しないでください。