Я пытаюсь использовать команду locate для поиска файлов в моей домашней папке, однако всякий раз, когда я пытаюсь выполнить это, я не получаю результатов:
locate -i -l 4 --regexp '^\/home\/jack\/[A-Za-z0-9\/\ ]*(My.)*$'
Я также пытался, ^\/home\/jack\/^(?!\.)[A-Za-z0-9\/\ ]*(My.)*$
но это также не дает результатов.
Файл, который я ищу, просто чтобы проверить это /home/jack/Music/Foals/My Number.flac
Я хотел бы исключить результаты поиска скрытых файлов из моего поиска.
bash
regular-expression
locate
Джек Джонс
источник
источник
locate
. Имеет ли смысл объединять-b
(т. Е. «Сопоставлять только базовое имя с указанными шаблонами») с путем в--regexp
? Почему вы избегаете/
с?(My.)*
должен делать?My.*$
работает. Вы должны сбежать()
в основных РЗ.--regexp
принимает основное регулярное выражение. Попробуйте перейти--regexp
на--regex
(нетp
). На странице руководства сказано,--regex
что расширенное сопоставление регулярных выражений.Ответы:
Это похоже на работу.
Цитаты из руководства:
источник
Как найти работает
Индекс файлов,
locate
используемых командой, обычно перестраивается один раз в день. Это построено этой работой cron/etc/cron.daily/mlocate
. Так что ваши записи скорее всего просто еще не там. Вы можете перезапустить его, если хотите вручную перестроить эти индексы.Используя find
Однако вам, вероятно, лучше использовать такую команду, как
find
поиск файлов в вашем домашнем каталоге.Использование графического интерфейса
Вас также может заинтересовать графический инструмент поиска. Взгляните на другие вопросы и ответы по U & L под названием: GTK Frontend для locate, который охватывает один из таких инструментов, как Catfish. Этот инструмент может использовать как
locate
данные, так иfind
команды.источник
locate
быстрее, чемfind
даже если я должен сделатьupdatedb
первый. Пока база данных уже достаточно свежая, на большинстве системupdatedb
это не займет много времени. Найти синтаксис, вероятно, проще в этом случае, хотя.find
.Вы также можете использовать другой подход:
Я не уверен, что ты пытаешься сделать. Вы используете
-i
флаг , чтобы сделать его чувствительно к регистру и ваше регулярное выражение не очень специфично, вы , кажется , топ хотите найти все файлы и папки , которые находятся под/home/jack
и которые содержатMY
,My
,my
илиmY
где - нибудь в имени файла. Если так, просто бегиисточник
Это должно работать - сопоставляет только не скрытые файлы и папки:
еще проще - это соответствует файлам, которые не имеют скрытых каталогов где-либо в дереве каталогов. Вероятно, это то, что вы хотите:
источник
locate
, так как я пытаюсь интегрировать его в графический интерфейс Python для поиска по мере ввода, и это быстрее. Но все равно спасибо!locate
ускорять результаты. Например:echo /home/jack/**/*My.*