Способы использования команды ‘find’ для более эффективного поиска в каталогах

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

Существует несколько различных средств и утилит для поиска файлов в командной строке, таких как find, locate и which. Однако последняя утилита (which) используется только для нахождения команды.

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

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

Ниже приведен синтаксис выполнения команды locate:

# locate [option] [search-pattern]

Для демонстрации недостатка locate, давайте предположим, что мы ищем каталог с именем pkg в текущем рабочем каталоге.

Примечание: В команде ниже опция --basename или -b указывает locate на поиск только совпадения с именем файла (каталога) (которое точно равно pkg), но не с путем (/путь/к/pkg). Где \ является символом глобирования, он отключает неявную замену pkg на *pkg*.

$ locate --basename '\pkg'
Find Directory Using locate Command

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

Чтобы справиться с этой проблемой, используйте find, следуя упрощенному синтаксису ниже:

$ find starting-point options [expression]

Давайте рассмотрим несколько примеров.

Для поиска того же каталога (pkg) в текущем рабочем каталоге выполните следующую команду, где флаг -name считывает выражение, которым в данном случае является имя базового каталога.

$ find . -name "pkg"

Если возникают ошибки «Permission denied», используйте команду sudo так:

$ sudo find . -name "pkg"
Search a Directory Using find Command

Вы можете предотвратить поиск find в других типах файлов, кроме каталогов, используя флаг -type, чтобы указать тип файла (в команде ниже d означает каталог) следующим образом:

$ sudo find . -type d -name "pkg"

Кроме того, если вы хотите перечислить каталог в формате длинного списка, используйте переключатель действия -ls:

$ sudo find . -type d -name "pkg" -ls
Find and List Directory

Затем опция -iname позволит выполнить поиск без учета регистра:

$ sudo find . -type d -iname "pkg" 
$ sudo find . -type d -iname "PKG" 
Find Directory with Case Sensitive

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

$ man find
$ man locate

В качестве последнего замечания, команда find более надежна и эффективна для поиска файлов (или каталогов) в системе Linux по сравнению с командой locate.

Так же, как и ранее, не забудьте отправить нам свой отзыв или вопрос через раздел комментариев ниже. Наконец, всегда оставайтесь на связи с Tecmint.

Source:
https://www.tecmint.com/find-directory-in-linux/