Быстрее искать, чем находить

Быстрее искать, чем находить

Есть ли способ найти вещи быстрее, чем find. Я делаю/делал :-

$sudo find / -perm +4000

Но поиск необходимой информации занимает много времени, и я знаю, что большинство файлов, для которых установлен этот конкретный бит разрешения, будут статическими, а не динамическими.

Я пытался

[$] sudo locate --all / -perm +4000                                                                                               
locate: invalid option -- 'p'

но как видно не удалось. Есть идеи, как я могу использовать locate, чтобы сделать то же самое.

Просто поделиться /usr/bin/locate- это символическая ссылка, /etc/alternatives/locateкоторая в свою очередь символическая ссылка на/usr/bin/mlocate

решение1

К сожалению, mlocateне индексирует права доступа к файлам, поэтому вам придется прибегнуть к сканированию файловых систем с помощью find, если только вы не найдете реализацию locate, которая поддерживает эту функциональность (или не расширите ее mlocateсамостоятельно).

решение2

Как упомянул @shirish, mlocate не индексирует права доступа к файлам. Но все же у меня есть несколько предложений для вас:

Во-первых, согласно руководству по поиску, опция -perm +mode устарела, поэтому вместо нее следует использовать -perm /mode.

-perm +режим

Устаревший, старый способ поиска файлов с любым из битов разрешений в установленном режиме. Вместо этого следует использовать -perm /mode. Попытка использовать синтаксис '+' с символическими режимами даст неожиданные результаты. Например, '+u+x' является допустимым символическим режимом (эквивалентным +u,+x, т. е. 0111) и поэтому не будет оцениваться как -perm +mode, а вместо этого как точный спецификатор режима -perm mode, и поэтому он сопоставляет файлы с точными разрешениями 0111 вместо файлов с любым установленным битом выполнения. Если вы нашли этот абзац запутанным, вы не одиноки - просто используйте -perm /mode. Эта форма теста -perm устарела, поскольку спецификация POSIX требует интерпретации начального '+' как части символического режима, и поэтому мы перешли на использование '/' вместо этого.

-perm /режим

Для файла установлены любые биты разрешений mode. Символические режимы принимаются в этой форме. Вы должны указать 'u', 'g' или 'o', если используете символический режим. См. раздел ПРИМЕРЫ для некоторых иллюстративных примеров. Если в режиме не установлены биты разрешений, этот тест соответствует любому файлу (идея здесь в том, чтобы соответствовать поведению -perm -000).

Во-вторых, можно попытаться ускорить поиск: для этого нужно быть максимально конкретным. Например:

find /some/path ...

сократит время поиска, так как вы указали путь, по которому нужно искать (/some/path), вместо поиска по всему корневому каталогу (/)

И последнее, вы можете исключить системные папки, которые вы не хотите сканировать во время поиска. Например:

 find /some/path -not \( -path /excluded/path -prune \) -name *.js

Связанный контент