Чи є спосіб збільшити швидкість `find`


15

Мені цікаво, чи існує спосіб підвищення findшвидкості в терміналі, не має сенсу, що використання Internet google для пошуку матиме кращу швидкість, ніж пошук локальних рядків або просто імен файлів.

Мені цікаво, чи існує спосіб у майбутньому побудувати локальну базу індексування, в майбутньому команда find може бути дуже швидкою.

Або будь-які інші пропозиції?

Спасибі!


Чи можете ви редагувати свою публікацію в операційній системі та / або розповсюдженні?
Джоді C

Відповіді:


15

Спробуйте використовувати locate, воно повинно робити те, що ви хочете.


13
Зазвичай це гарна ідея, щоб детальніше уточнити відповідь. Як згадування того, з якого пакета locateпоходить (як правило slocate), і використовувати updatedbдля відновлення БД. :-)
Патрік

1
Це не працює для розділів з відключеною індексуванням. Наприклад, розділи NTFS страждають від поганої продуктивності, якщо індексування включено, таким чином, пошук не буде працювати для тих, "як слід".
ojrask

9

Це дуже залежить від того, який ваш критерій пошуку.

Якщо ви шукаєте шаблони назви файлів або імен файлів, пошук відбувається набагато швидше, але не підходить для свіжогенерованих файлів, оскільки використовуваний індекс зазвичай оновлюється лише один раз на день. Але якщо ви можете використовувати його, це дуже швидко.

Але за допомогою пошуку ви можете шукати розмір файлу, вік файлу та інші речі, які не можна шукати за місцем пошуку.

Якщо ви знаєте, де шукати, ви можете використовувати шлях для розмежування сфери пошуку:

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

буде шукати файли лише від 2 до 10 М, максимум 1 рік, в / деякий / шлях.

Програми, доступні на шляху, можуть шукати, за допомогою яких, довідки, lib та конфігураційних файлів, з чим. Приклади:

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

На певному встановленому (і мінливому) інтервалі виконання запущеної роботи сканує файлову систему, а потім створює з нею базу даних. Тоді ця база даних (розміщенаb), з відповідними індексами, протидіє locateкоманді замість того, щоб сканувати через ваш жорсткий диск у цій точці.

Тож перевершення полягає в тому, що це дуже швидко порівняно зі скануванням жорсткого диска. Мінусом є те, що база даних locate (locatedb) не є "живою", тому її можна використовувати лише для файлів, що існували "станом на" останнього сканування.

Щоб оновити розташування, яке зараз знаходиться, запустіть updatedb(або sudo updatedbза потреби)

btw Я просто побіг sudo updatedbлокально, і це зайняло 3 1/2 секунди! У мене 31 000 файлів.


1

Як зазначали інші, пошук може бути кращим інструментом для більш простого пошуку.

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

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


0

за одну пошукову операцію; Я не знайшов жодного прискорення; якщо не намагаєтесь звузити пошук, використовуючи findпараметри.

Однак; якщо ви хочете зробити кілька findоперацій над одним набором файлів ; Я отримав значне прискорення, заповнивши тимчасовий файл із усіма іменами та використовуючи grep. Звичайно, це не враховує файли, які додаються або видаляються.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.