На этот вопрос уже есть ответ здесь:
Я искал файл в моем источнике и пытался найти и найти. Удивительно, что locate искал на всей машине и был быстрее, чем find, который был поиск только в текущем каталоге и подкаталогах.
Вот мои команды оболочки для обоих:
find . -name vendorsetup.sh # takes 50 seconds to search all files in curren -sub directories.
locate vendorsetup.sh # takes 20 seconds to search file in whole machine.
Почему это?
locate
использует базу данных и периодически делает материально-технические ресурсы Вашей файловой системы. База данных оптимизирована для поиска. find
потребности пересечь целый подкаталог, который довольно быстр, но не с такой скоростью, как, располагаются.
О найдите:
Найдите использует индекс, который хранит в
/var/lib/slocate/
, это обновляется ночным заданием Крона. Это ночное задание обычно работает около 1:00 или 2:00 местного времени и полностью сканирует Вашу всю систему (включая все подключенные диски). Получающийся индекс является просто списком имен файлов. Поиск будет так быстр из-за уже индексации, сделанной к каждому элементу в файловой системе
Но find
не похож так,
каждый раз это рассмотрит поиск как новый поиск и никакое хранение любого кэша расположения файла.
таким образом, это займет время для нахождения.
надежда, которая помогает.