Способы использования команды '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 будет искать, начиная с корневого каталога (/), поэтому другие каталоги с таким же именем также будут совпадать.
Следовательно, чтобы справиться с этой проблемой, используйте find, следуя приведённому ниже упрощённому синтаксису:
$ find starting-point options [expression]
Давайте рассмотрим несколько примеров.
Чтобы найти ту же директорию (pkg) выше, внутри текущей рабочей директории, выполните следующую команду, где флаг -name читает выражение, которое в данном случае является базовым именем директории.
$ find . -name "pkg"
Если вы столкнулись с ошибками “Доступ запрещён”, используйте команду sudo следующим образом:
$ sudo find . -name "pkg"
Вы можете предотвратить поиск командой 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.



