найти против найти

Существуют команды find и locate для поиска файлов на диске.

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

Есть ли другие различия? В каких ситуациях один предпочитает один или другой? И когда база данных locate обновляется обычно?

30
задан 8 September 2015 в 16:49

2 ответа

locate действительно только хорошо для нахождения файлов и отображения их людям. Можно сделать несколько вещей с ним, но я не доверял бы ему достаточно для парсинга и — как Вы say—, невозможно гарантировать состояние внутренней базы данных, больше потому что только планируется работать от /etc/cron.daily/mlocate один раз в день!

find живо. Это фильтрует, исключает, выполняется. Это подходит для парсинга. Это может произвести относительные пути. Это может произвести полные пути. Это может сделать вещи на основе атрибутов, не просто называет.

locate, конечно, имеет место на моей панели инструментов, но это обычно правильно внизу как последняя попытка найти что-то. Это легче, чем find также.

27
ответ дан 9 September 2015 в 02:49
  • 1
    @Motiun из всех тех строк, Вы хотите только San Fier как вывод? – muru 28 November 2016 в 23:34

Так, как мне нравится Oli (который является много!) Я не соглашаюсь с ним на find команда. Мне не нравится он.

find команда принимает три минуты

Примите, например, это простое управление:

$ time find / -type f -name "mail-transport-agent.target"
find: ‘/lost+found’: Permission denied
find: ‘/etc/ssmtp’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
    (... SNIP ...)
find: ‘/run/user/997’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied

real    3m40.589s
user    0m4.156s
sys     0m8.874s

Это принимает три минуты для find искать все начинающее с /. Стопками по умолчанию сообщений об ошибках появляются, и необходимо перерыть их для нахождения то, что Вы ищете. Тем не менее это лучше, чем grep для поиска целого диска строку, которая занимает 53 часа: 'grep'ing все файлы для строки занимает много времени

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

locate команда берет меньше, чем секунда

Теперь давайте использовать locate:

$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target

real    0m0.816s
user    0m0.792s
sys     0m0.024s

Определять местоположение команда берет меньше, чем секунда!

updatedb только выполненный один раз в день по умолчанию

Это верно updatedb команда, которая обновляет определять местоположение базу данных, только выполняется один раз в день по умолчанию. Можно выполнить его вручную перед поиском файлов, просто добавленных при помощи:

$ time sudo updatedb

real    0m3.460s
user    0m0.503s
sys     0m1.167s

Хотя это займет 3 секунды, это является маленьким по сравнению с find команда 3 + минуты.

Я обновил мой sudo crontab -e включать строку внизу:

# m h  dom mon dow   command
  0 0  1   *   *     /bin/journalctl --vacuum-size=200M
*/5 *  *   *   *     /usr/bin/updatedb

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

Но нет никаких атрибутов?

Можно передать по каналу locate вывод к другим командам. Если, например, Вы хотите атрибуты файла, можно использовать:

$ locate mail-transport-agent.target | xargs stat
  File: '/lib/systemd/system/mail-transport-agent.target'
  Size: 473         Blocks: 8          IO Block: 4096   regular file
Device: 10305h/66309d   Inode: 667460      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-03-31 18:11:55.091173104 -0600
Modify: 2017-10-27 04:11:45.000000000 -0600
Change: 2017-10-28 07:18:24.860065653 -0600
 Birth: -

Сводка

Я отправил этот ответ для проявления скорости и простоты использования locate. Я пытался обратиться к некоторым недостаткам команды, на которые указывают другие.

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

8
ответ дан 23 November 2019 в 00:48

Другие вопросы по тегам:

Похожие вопросы: