От 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
не найти его, потому что нет никаких файлов, которые соответствуют этому шаблону: поскольку есть Глоб характер, найти волю действительно пытайтесь сопоставить (в regex): ^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.*
Надеется, что это помогает.
Редактировать. Чтобы ответить на комментарий: если вы хотите locate
все JPG файлы в папке /home/sh/music/
, это должно сделать:
locate '/home/sh/music/*.jpg'
(не -b
здесь, он не будет работать). Обратите внимание, что это отобразит все файлы jpg, которые находятся в папке /home/sh/music
, а также в подпапках. Вы могли бы возникнуть соблазн использовать -i
флаг (игнорировать регистр), так что вы будете также найти те, которые имеют прописную JPG расширение:
locate -i '/home/sh/music/*.jpg'
Edit 2. Лучше сказать это где-то: команда locate
работает с базой данных —, поэтому она может быть намного быстрее, чем find
. Если у вас есть последние файлы, они не будут locate
d, и если вы удалите некоторые файлы, они все равно могут быть locate
d. Если вы в этом случае (который может быть целью вашего другого комментария), то необходимо обновить базу данных locate
«s: как корень, вопрос:
updatedb
Предупреждения. Команда updatedb
может потребоваться несколько минут, чтобы не путать.
Ненавижу задавать еще один глупый вопрос, но можно ли указать определенное местоположение? например Я попытался сделать: locate -b "/home/sh/music/*.jpg", но он, похоже, не работает – Tebe
@gekannt В этом случае вам не нужен флаг '-b'. –
ОК, я пробовал, что не работает, если найду. * .jpg, я получаю много файлов, если я найду - ничего. https://dl.dropboxusercontent.com/u/18776391/storage/21%3A22%3A1323062013_001.png https://dl.dropboxusercontent.com/u/18776391/storage/21%3A25%3A5723062013_001.png https: // dl.dropboxusercontent.com/u/18776391/storage/21%3A28%3A3423062013_001.png – Tebe