Оболочка Linux: возможно ли ускорить поиск файлов с помощью «поиска» с помощью предварительно определенного списка файлов / папок? - PullRequest
1 голос
/ 21 февраля 2011

Я в основном программирую на Linux, используя оболочку tcsh. По умолчанию мой текущий каталог является корнем моей кодовой базы - я использую «find», чтобы найти любой файл, который я хочу изменить, а затем, как только find показывает местоположение файла, я могу затем редактировать / изменять в Vim .

Проблема заключается в том, что из-за размера базы кода каждый раз, когда я спрашиваю find, чтобы найти местоположение файла, требуется не менее 4-5 секунд для завершения поиска, которые слишком короткие, чтобы их можно было использовать. для всего остального !! Итак, поскольку скорость добавления новых файлов в базу кода очень мала, я ищу способ:

1) Создать список всех файлов в моей кодовой базе

2) Найдите ответ на мой запрос только в тех местах / файлах

Я видел, как открытие файлов в cscope происходит молниеносно, так как в нем ранее сохранялся список файлов. Я бы хотел использовать тот же механизм поиска, но не из окна cscope, а из общей строки cmd.

Есть идеи?

Ответы [ 4 ]

6 голосов
/ 21 февраля 2011

Установите пакет locate, mlocate или slocate из вашего дистрибутива и либо дождитесь, пока cron запустит задачу обновления :), либо выполните команду updatedb вручную с помощью /etc/cron.daily/mlocate или аналогичного файла..

$ time locate kernel.txt
/home/sarnold/Local/linux-2.6/Documentation/sysctl/kernel.txt
/home/sarnold/Local/linux-2.6-config-all/Documentation/sysctl/kernel.txt
/home/sarnold/Local/linux-apparmor/Documentation/sysctl/kernel.txt
/usr/share/doc/libfuse2/kernel.txt.gz

real        0m0.595s
2 голосов
/ 21 февраля 2011

Да.См. slocate (или updatedb & locate).

Флаг -U особенно интересен, поскольку вы можете просто проиндексировать каталог, содержащий ваш код (и, следовательно, обновление или создание базы данных будет быстрым).

1 голос
/ 21 февраля 2011

Вы можете написать список каталогов в файл и использовать их в своей команде поиска:

$ find /path/to/src -type d > dirs
$ find $(cat dirs) -type f -name "foo"

Также можно записать список файлов в файл и использовать grep для него. Список файлов, скорее всего, изменится, чем список папок.

$ find /path/to/src -type f > files
$ vi $(grep foo files)
0 голосов
/ 01 августа 2011

find в сочетании с xargs (подстановка -exec) существенно отличается по времени выполнения:

http://forrestrunning.wordpress.com/2011/08/01/find-exec-xargs/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...