Способы использования команды 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.