Мне было интересно, как ограничить диапазон поиска "locate" каким-либо каталогом?
Например, как найти файлы / каталоги со строкой "math" в их именах в некотором каталоге "/ home / tim / science / "?
Спасибо и всего наилучшего!
ОБНОВЛЕНИЕ : примечание об использовании опции регулярного выражения locate по сравнению с расширением имени оболочки в отношении аргументов locate ... [ 1150]
РАСШИРЕНИЕ ОБЪЕКТА ФИЛЬМЫ
Когда вы набираете locate /bin/b*
(обратите внимание, что нет кавычек), происходит несколько вещей.
locate
как много отдельных аргументов командной строки. locate
затем проверяет каждое из этих аргументов на соответствие каждому из файлов в своей базе данных и выводит совпадения. Обратите внимание, однако, что «locate» не имеет понятия о текущем рабочем каталоге. Он сопоставляет ваши аргументы только с полными именами файлов в его базе данных.
Это означает, что он будет соответствовать как /bin/bash
, так и /home/user/bin/brackets
Таким образом, у вас есть некоторая степень контроля, но поиск регулярных выражений locate предлагает больше; как и некоторые другие варианты локации.
ОПЦИЯ РЕГИОНА LOCATE
Когда вы печатаете locate -r "/bin/b.*"
, происходят разные вещи, чем с простыми аргументами .. ( shell-extended-args просто список простых аргументов)
-r
говорит найти , чтобы обработать ваш аргумент как образец регулярного выражения. locate -r "^/bin/b.*"
создает имена файлов, начинающиеся с / bin / b ... eg2. locate -r ~/"bin/b.*"
создает имена файлов, начинающиеся с / home / user / bin / b . Обратите внимание, что ~ / не является , не защищен кавычками и поэтому подлежит [ 1139] shell tilde-extension , который преобразует ~ / в / home / user / Резюме: «расширение shell filname» совершенно отличается от «regex»
Теперь вернемся к исходному сообщению:
locate
обычно выводит всю базу данных на стандартный вывод, поэтому, чтобы ограничить ее определенным каталогом, вам необходимо отфильтровать его ... Это можно сделать с помощью опций locate.
Вы можете использовать возможность регулярных выражений locate, а не просто оболочку ... (locate /dir/myfile*
оболочка) ...
Из info locate : -r
, --regex
примечание: -i = игнорировать регистр
. , , , , -r = регулярное выражение
. , , , , ~ / будет расширен оболочкой до / home / user (когда ~ / не в кавычках)
. , , , , '\' (baskslash + пробел; без кавычек) - это буквальный пробел (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но обязательно оставьте ~ / вне кавычек: ~/my\ regex
или -/"my regex"
например. locate -ir ~/".*"la\ bella\ vita
совпадает с locate -ir ~/".*la bella vita"
и будет искать во всем домашнем каталоге «La Bella Vita», встречающееся где угодно.
Вы также можете ограничить поиск только именем файла , но используя -b
или --basename
.. в этом случае регулярное выражение начала строки ^
применяется к только базовое имя ...
Я чаще всего использую locate -bir
PS .. Locate
настолько быстро, что я никогда не использовал find
... и я не использовал наутилус поиск (слишком медленный)
С помощью 'locate', если вы ищете что-то новое, просто запустите sudo updatedb
, чтобы обновить базу данных locate ... (но если вы недавно добавили это, вы наверно знаешь где это:) ....
Для меня наиболее удобным является
cd /home/tim/science
locate math | grep `pwd`
Пропустите его через grep, как это
$ locate less | grep ^/bin
/bin/bzless
/bin/less
/bin/lessecho
/bin/lessfile
/bin/lesskey
/bin/lesspipe
/bin/zless
Правка: другой ответ лучше, я не знал, что вы можете передать шаблон, чтобы найти его.
Вы можете использовать locate /rootpath/*filenamespec
. Я не пробовал раньше, но, похоже, работает. Для вашего примера это будет locate /home/tim/science/*math*
Вы можете посмотреть на команду find
, а не на locate
для такого рода поведения. Синтаксис будет find rootforsearch -name filenamepattern -print
. В этом случае ваш пример потребует find /home/tim/science -name *math* -print
. Не так быстро, как найти, так как нет базы данных для поиска ... он фактически ищет файловую систему. Есть много опций, которые вы можете использовать, кроме печати, если вы собираетесь что-то сделать с файлом.
Мне нравится использовать locate --all
как, возможно, locate -A tim science math
. Я думаю, что это в духе простоты locate.