Как найти каталог в Linux из командной строки

Вы когда-нибудь теряли папку на компьютере с Linux? Не волнуйтесь! Linux предлагает мощные инструменты командной строки для поиска пропавших каталогов. Одним из самых универсальных является команда find, которая позволяет искать каталоги по различным критериям.

Сначала мы покажем, как искать каталоги по имени. Затем мы покажем, как найти недавно измененные каталоги и каталоги, измененные за последние N дней. Вы также узнаете, как определить старые каталоги – те, которые были изменены более N дней назад.

Далее мы рассмотрим поиск каталогов в заданном диапазоне глубины с помощью опций maxdepth и mindepth. Вы увидите, как находить каталоги на основе их разрешений, а также каталоги, содержащие определенное количество файлов.

Наконец, мы объясним, как искать пустые каталоги, что может быть полезно для выявления неиспользуемых или ненужных частей вашей файловой системы.

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

Поиск по имени каталога

Если вы знаете имя каталога и то, с чего начать поиск, воспользуйтесь этой командой:

find /path/to/search -type d -name "directory_name"

Замените /path/to/search на фактический путь, а "directory_name" – на целевой каталог.

find ~/ -type d -name "Documents"

Эта команда ищет каталоги с именем «Documents», начиная с домашнего каталога пользователя ( ~/ ).

Вот описание команды:

  1. find ~/: Начинается поиск из домашнего каталога пользователя ( ~/ ).
  2. -type d: Указывает find искать каталоги ( -type d ) вместо обычных файлов.
  3. -name "Documents": Этот параметр указывает find искать каталоги с именем «Documents». Кавычки вокруг слова «Documents» означают, что поиск ведется именно по этому имени, а не просто по каталогам, содержащим слово «Documents».

Таким образом, эта команда будет искать в домашнем каталоге пользователя и всех его подкаталогах любые каталоги с именем «Documents». Если таковые будут найдены, она выведет полный путь к ним.

Поиск каталогов в текущем каталоге

Если вы хотите начать поиск не из домашнего каталога (~/), а из текущего, можно просто опустить часть ~/ в команде, как показано ниже:

find . -type d -name "Documents"

Вот описание того, что делает каждая опция:

  1. find .: . обозначает текущий каталог, поэтому поиск начнется с текущего рабочего каталога.
  2. -type d: Это указывает find на поиск каталогов.
  3. -name "Documents": Этот параметр указывает find искать каталоги с именем «Документы».

Команда выполнит поиск в текущем каталоге и всех его подкаталогах любых каталогов с именем «Documents» и выведет полные пути к этим каталогам.

В качестве альтернативы можно также использовать переменную $PWD, которая представляет собой текущий рабочий каталог, например:

find $PWD -type d -name "Documents"

Обе команды дадут одинаковый результат – запуск поиска из текущего каталога.

Использование µµ23µµ для игнорирования регистра

Это довольно полезный флаг в команде find.

Мы можем использовать опцию -iname вместо -name, чтобы сделать поиск .

Вот пример использования -iname вместо -name:

find . -type d -iname "Documents"

Параметр -iname "Documents" будет соответствовать каталогам с именами типа «Documents», «documents», «DOCUMENTS» и т. д. Это может быть полезно, если вы не уверены в точной капитализации имени каталога.

Основные различия между -name и -iname следующие:

  • -name выполняет поиск с учетом регистра, поэтому будет искать только каталоги с точной капитализацией заданного шаблона.
  • -iname выполняет поиск без учета регистра, поэтому будет соответствовать каталогам независимо от их капитализации.

Вы также можете включить поисковый термин в подстановочный знак, как показано ниже:

find . -type d -iname "*documents*"

Эта команда выведет список всех каталогов в текущем каталоге (и его подкаталогах), в именах которых присутствует слово «documents».

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

Лично я предпочитаю использовать опцию -iname вместе с командой find при поиске чего-либо.

Поиск как по каталогам, так и по файлам

Если убрать часть -type d из команды find, она будет искать как файлы, так и каталоги, соответствующие другим критериям, например -name или -iname.

Команда будет выглядеть следующим образом:

find . -iname "Documents"

Вот что произойдет:

  1. Команда find выполнит поиск в текущем каталоге ( . ) и всех его подкаталогах любых элементов (как файлов, так и каталогов) с именем «Documents» (без учета регистра).
  2. В результаты будут включены как каталоги с именем «Documents», так и любые обычные файлы с именем «Documents».

Таким образом, результат этой команды будет включать:

  • любые каталоги с именами «Documents», «documents», «DOCUMENTS» и т.д.
  • * Любые обычные файлы* с именами «Documents», «documents», «DOCUMENTS» и т. д.

Удаление части -type d делает поиск более широким, поскольку он будет включать как каталоги, так и файлы, соответствующие заданному шаблону имен.

Это может быть полезно, если вы не уверены, является ли искомая запись «Документы» каталогом или файлом, и хотите найти все ее вхождения.

Однако если вы ищете именно каталоги с именем «Документы», лучше оставить параметр -type d, чтобы сузить поиск.

Поиск недавно измененных каталогов

Чтобы вывести список каталогов, измененных в определенный период времени, используйте -newermt дважды.

Например, для поиска каталогов, которые были созданы или изменены в период с 15 марта 2024 года по 15 апреля 2024 года (исключительно), вы можете использовать:

find /path/to/search -type d -newermt "2024-03-15" ! -newermt "2024-04-15"

Вот описание вышеприведенной команды:

  1. find /path/to/search: Это указывает команде find начать поиск из каталога /path/to/search.
  2. -type d: Этот параметр гарантирует, что команда find будет искать только каталоги, а не обычные файлы.
  3. -newermt "2024-03-15": Этот параметр указывает find включать в поиск только каталоги, которые были созданы или изменены ранее 15 марта 2024 года.
  4. ! -newermt "2024-04-15": Символ ! отрицает условие, поэтому эта часть указывает find исключить каталоги, которые новее 15 апреля 2024 года.

Комбинация этих параметров приводит к тому, что find ищет каталоги, которые были созданы или изменены 15 марта 2024 года или позже, но до 15 апреля 2024 года.

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

Поиск каталогов, измененных за последние N дней

Чтобы найти каталоги, измененные за последние n дней, используйте -mtime .

Следующая команда выполнит поиск каталогов в каталоге ~/Projects/, которые были изменены в течение последних 7 дней.

find ~/Projects/ -type d -mtime -7

Вот что делает каждая часть команды:

  1. find ~/Projects/: Это указывает команде find начать поиск из каталога ~/Projects/.
  2. -type d: Этот параметр гарантирует, что команда find будет искать только каталоги, а не обычные файлы.
  3. -mtime -7: Эта опция указывает find включать в поиск только те каталоги, которые были изменены (буква «m» в «-mtime» означает «время модификации») в течение последних 7 дней.

Часть -mtime -7 работает следующим образом:

  • Знак - означает «меньше» или «в пределах последнего».
  • Число 7 обозначает количество дней.

Это может быть полезно, например, если вы хотите найти все новые каталоги, которые были созданы или обновлены в последнее время в вашем каталоге ~/Projects/, возможно, для целей резервного копирования или отслеживания.

Определение старых каталогов

Чтобы найти каталоги, измененные более N дней назад (т. е. (найти каталоги старше N дней)), используйте -mtime со знаком плюс.

Например, следующая команда будет искать каталоги в каталоге ~/Projects/, которые были изменены более 7 дней назад.

find ~/Projects/ -type d -mtime +7

Другими словами, она найдет каталоги, которые не были изменены (созданы, обновлены или доступны) за последние 7 дней.

Параметр -mtime +7 указывает find включать только те каталоги, время модификации которых («m» в «-mtime») больше 7 дней назад.

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

Как узнать, действительно ли каталоги были изменены более X дней назад? Очень просто.

Чтобы проверить, действительно ли каталоги, найденные командой find, были изменены более 7 дней назад, вы можете использовать команду stat для отображения времени модификации каждого каталога.

find ~/Projects/ -type d -mtime +7 -exec stat -c '%n %y' {} \;

Вот объяснение вышеприведенной команды:

  1. find ~/Projects/ -type d -mtime +7: Эта часть команды такая же, как и предыдущая – поиск каталогов, которые старше 7 дней.
  2. -exec stat -c '%n %y' {} \;: В этой части используется опция -exec из find для выполнения команды stat для каждого найденного каталога.
  • stat -c '%n %y': Команда stat отображает имя файла ( %n ) и время последней модификации ( %y ) каталога.
  • {}: Это заполнитель, который заменяется текущим каталогом, найденным командой find .
  • \;: Завершает выполнение команды -exec.

При выполнении этой команды отображается путь и время последней модификации каждого каталога, возраст которого превышает 7 дней. Это позволит вам убедиться, что найденные каталоги действительно были изменены более 7 дней назад.

Вот пример вывода:

/home/ostechnix/Projects/Python 2024-03-22 14:18:14.958042173 +0530
/home/ostechnix/Projects/Vim 2024-03-22 14:05:55.887041168 +0530

Время модификации, отображаемое в выводе, поможет вам убедиться, что каталоги действительно старше 7 дней, как того требует исходная команда find.

Поиск каталогов в заданном диапазоне

Мы можем искать каталоги в заданном диапазоне глубин, используя опции maxdepth и mindepth команды find.

Вот синтаксис:

find /path/to/search -mindepth X -maxdepth Y -type d

Позвольте мне объяснить, что делает каждая опция в этой команде:

  1. find /path/to/search: Это указывает команде find начать поиск из каталога /path/to/search.
  2. -mindepth X: Этот параметр задает минимальный уровень глубины каталогов, которые будут включены в результаты поиска. Значение X представляет собой минимальное количество уровней каталогов от начальной точки.
  3. -maxdepth Y: Этот параметр задает максимальный уровень глубины для каталогов, включаемых в результаты поиска. Значение Y представляет собой максимальное количество уровней каталогов от начальной точки.
  4. -type d: Этот параметр гарантирует, что команда find будет искать только каталоги, а не обычные файлы.

Обратите внимание, что опция -mindepth должна быть указана перед другими аргументами, включая -type .

Например, для поиска каталогов, находящихся в каталоге /Projects, вы можете использовать следующую команду:

find ~/Projects -mindepth 2 -maxdepth 4 -type d

Эта команда выполнит поиск каталогов, находящихся на глубине от 2 до 4 уровней (включительно) относительно каталога /Projects.

Вы можете изменить значения X и Y в соответствии со своими потребностями. Например, если вы хотите искать каталоги глубиной ровно 3 уровня, вы можете использовать:

find ~/Projects -mindepth 3 -maxdepth 3 -type d

В результате в результаты поиска будут включены только каталоги глубиной 3 уровня.

Совместное использование maxdepth и mindepth может быть полезно, когда вы хотите сузить поиск до определенного диапазона глубин каталогов, что может быть полезно для организации и управления файловой системой.

Более подробную информацию о maxdepth и mindepth можно найти по следующей ссылке:

Поиск каталога по его разрешению

Чтобы найти каталоги на основе их разрешений, можно использовать команду find с опцией -perm.

find /path/to/search -type d -perm <permission_specification>

Замените /path/to/search на каталог, в котором вы хотите начать поиск, а <permission_specification> – на нужное разрешение. Разрешение можно указать в восьмеричной системе счисления.

Позвольте мне показать вам несколько примеров.

Чтобы найти все каталоги в текущем каталоге с разрешением 755 (т. е. rwx для владельца и rx для группы и других):

find . -type d -perm 755

Чтобы найти каталоги с правами rwx для владельца, r-x для группы и без прав для остальных:

find . -type d -perm 750

Чтобы найти все каталоги в пределах ~/Projects с любым разрешением для владельца и r-x для группы и других:

find ~/Projects~ -type d -perm -005

Вы можете настроить параметр <permission_specification> в соответствии с вашими конкретными требованиями. Кроме того, при необходимости вы можете использовать параметры -maxdepth и -mindepth для управления глубиной поиска.

Поиск каталогов, содержащих определенное количество файлов

Чтобы найти каталоги, содержащие определенное количество файлов, можно использовать комбинацию команд find, wc и bash.

Следующая команда находит все каталоги в текущем каталоге и его подкаталогах, которые содержат ровно 4 файла, и печатает полный путь к этим каталогам.

find . -type d -exec bash -c 'if [ $(find "$1" -maxdepth 1 -type f | wc -l) -eq 4 ]; then echo "$1"; fi' _ {} \;

Давайте разберем эту команду по шагам:

  1. find . -type d: Начинается поиск каталогов (не файлов) из текущего каталога ( . ).
  2. -exec bash -c '...' _ {} \;: Эта часть использует опцию exec из find для выполнения пользовательского сценария Bash для каждой найденной директории.
  3. if [ $(find "$1" -maxdepth 1 -type f | wc -l) -eq 4 ]; then echo "$1"; fi: Это пользовательский Bash-скрипт, который выполняется для каждого каталога.
  • $(find "$1" -maxdepth 1 -type f | wc -l): Эта часть подсчитывает количество файлов (не каталогов) в текущем каталоге ( "$1" ). Параметр -maxdepth 1 обеспечивает подсчет файлов только в текущем каталоге, а не в подкаталогах.
  • [ ... -eq 4 ]: Проверяется, равно ли количество файлов в текущем каталоге ровно 4.
  • then echo "$1"; fi: Если условие истинно (в каталоге ровно 4 файла), выводится полный путь к каталогу.

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

Поиск пустых каталогов

Чтобы найти пустые каталоги, используйте флаг -empty:

find /path/to/search -type d -empty

Например, чтобы найти пустые каталоги в каталоге «Work», выполните команду:

find ~/Work/ -type d -empty

Не забывайте корректировать пути по мере необходимости.

Заключение

В этом руководстве вы узнали несколько приемов использования команды find для поиска каталогов в системе Linux.

Вы можете искать по имени, по тому, как недавно оно было изменено, или по количеству файлов внутри. Вы даже можете найти пустые папки или папки с определенными правами доступа.

Поняв, как использовать такие опции, как maxdepth, mindepth и size, вы сможете уточнить поиск и сосредоточиться на конкретных каталогах, которые вам нужны.

Так что в следующий раз, когда папка пропадет, не паникуйте! Используйте эти команды find, чтобы найти ее и сохранить свои файлы в порядке.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен ostechnix.com

Похожие статьи

Комментарии (0)