Есть ли способ увеличить скорость поиска


15

Мне интересно, есть ли способ увеличить findскорость в терминале, не имеет смысла, что использование интернет-Google для поиска будет быстрее, чем при локальном поиске строк или только имен файлов.

Мне интересно, есть ли способ создать локальную базу индексации, когда она будет создана, в будущем команда find может быть очень быстрой.

Или какие-либо другие предложения?

Благодарность!


Можете ли вы отредактировать свое сообщение с вашей операционной системой и / или дистрибутивом?
Джоди С

Ответы:


15

Попробуйте использовать locate, он должен делать то, что вы хотите.


13
Обычно это хорошая идея, чтобы конкретизировать ответ немного больше. Например, упомянуть, из какого пакета locate(обычно slocate) приходит пакет , и использовать его updatedbдля восстановления БД. :-)
Патрик

1
Это не работает для разделов с отключенной индексацией. Например, NTFS-разделы страдают от плохой производительности, если включена индексация, поэтому locate не будет работать для тех, «как должно».
ojrask

9

Многое зависит от того, каков ваш критерий поиска.

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

Но с помощью find вы можете искать размер файла, возраст файла и другие вещи, которые не могут быть найдены по локации.

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

find /some/path -size -10M -size +2M -mtime -365 ...

будет искать только файлы от 2 до 10 M, максимум 1 год в / some / path.

Программы, доступные по пути, могут быть найдены с помощью, справки, lib и файлов конфигурации с помощью whereis. Примеры:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz

7

использование locate

Причина в том, что locateиспользуется база данных всех существующих каталогов и файлов, которые уже были созданы, как вы и предполагали!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

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

Таким образом, преимущество в том, что это очень быстро по сравнению со сканированием жесткого диска. Недостатком является то, что база данных locate (расположена на б) не является «живой», поэтому ее можно использовать только для файлов, которые существовали «на момент» последнего сканирования.

Для обновления расположенного сейчас запустите updatedb(или sudo updatedbпри необходимости)

Кстати, я только что побежал на sudo updatedbместе, и это заняло 3 1/2 секунды! У меня есть 31 000 файлов.


1

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

Однако для более сложных поисков вы, вероятно, застряли с поиском.

Один из способов ускорить поиск - сузить каталог, в котором находятся ваши файлы, вместо поиска по всему корневому каталогу.


0

за одну операцию поиска; Я не нашел никакого ускорения; если не пытаться сузить поиск с помощью findпараметров.

Тем не мение; если вы хотите сделать несколько findопераций с одним и тем же набором файлов ; Я получил значительное ускорение заполнения временного файла со всеми именами файлов и использования grep. Конечно, это не учитывает файлы, которые добавляются или удаляются.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.