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

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


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

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

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

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

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

locate [option] [search-pattern]

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

Примечание. В приведенной ниже команде параметр --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" 

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

man find
man locate

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

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