Поиск по сайту:

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


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

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

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

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

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

# locate [option] [search-pattern]

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

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

$ locate --basename '\pkg'

Найти каталог с помощью команды locate

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

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

$ find starting-point options [expression]

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

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

$ find . -name "pkg"

Если вы столкнулись с ошибками “Доступ запрещён”, используйте команду sudo следующим образом:

$ sudo find . -name "pkg"

Поиск в каталоге с помощью команды find

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

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

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

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

Найти и перечислить каталог

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

$ sudo find . -type d -iname "pkg" 
$ sudo find . -type d -iname "PKG" 

Найти каталог с учетом регистра

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

$ man find
$ man locate

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

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