Как найти файлы по расширению в Linux с помощью find и locate

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

В этом руководстве мы рассмотрим различные методы или утилиты Linux, которые помогут Вам найти нужные файлы в каталоге с различными расширениями.

1. Поиск файлов с определенными расширениями в Linux

Команда find является полезным инструментом для поиска/нахождения файлов и каталогов в Linux, который также предоставляет возможность поиска файлов по их расширениям.

Приведем синтаксис команды find для поиска всех файлов, имеющих определенное расширение.

find . -type f -name "*.<fileExtension>"

Здесь приведен синтаксис:

  • -type – Этот флаг указывает тип документов для поиска, причем "f" определяет тип как «file».
  • -name – Предназначен для поиска файлов по их именам. В нашем случае имеются расширения, поэтому флаг -name ограничивает поиск конкретным расширением, указанным после него.
  • "*.<fileExtension>" – Флаг * представляет все файлы, имеющие определенные расширения.

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

Поиск конфигурационных файлов в Linux

Мы найдем все файлы с расширением «.conf», выполнив команду, приведенную ниже.

find . -type f -name "*.conf"

Как вы заметили, команда успешно перечислила все файлы с расширением .conf (конфигурационные файлы).

Поиск Zip-файлов в Linux

Перед этим попробуем найти все файлы с расширением .zip в каталоге «Documents», выполнив указанную команду.

find ~/Documents -type f -name "*.zip"

Поиск нескольких файлов (расширений) в Linux

Для одновременного поиска файлов с различными расширениями можно использовать команду «find» с флагом -o. Например, приведенная ниже команда найдет все файлы с расширениями .xconf и .zip.

find ~/ \( -name "*.xconf" -o -name "*.zip" \)

2. Поиск файлов по расширениям с помощью команд Find и Grep

Теперь, когда вы поняли, как находить файлы с помощью команды find, давайте рассмотрим ее сочетание с командой grep, которая является очень полезной командой, предлагаемой Linux для поиска текстовых шаблонов в искомых файлах. Поиск файлов выполняется командой find, а затем текстовые шаблоны выявляются фильтром grep.

Синтаксис команды find с командой grep для поиска файлов по расширениям приведен ниже.

find . -type f | grep 

Давайте разберемся в приведенном синтаксисе:

  • | – Используется для объединения двух команд, в нашем случае: find и grep. Она получает вывод от команды find, т.е. все файлы в каталоге, и передает их на вход фильтру grep, который отфильтрует файлы с определенным расширением и выведет их список.
  • grep – Это ключевое слово для команды grep, которая фильтрует файлы с определенным расширением.
  • <fileExtension> – Расширение файла – это тип файла, который вы должны искать.

Поиск PNG-файлов в Linux

Для поиска файлов в каталоге «Downloads» выполним указанную ниже команду, и команда grep отфильтрует файлы только с расширением .png.

find ~/Downloads -type f | grep .png

3. Поиск файлов по расширениям с помощью команд Grep и ls

Если вам уже известен каталог, в котором находятся ваши файлы, перейдите в него, а затем используйте команду ls для поиска файлов по расширениям из текущего каталога. Однако для получения желаемого результата мы можем дополнительно использовать команду grep.

ls | grep -i ".<fileExtension>"

Проанализируем представленный синтаксис:

  • ls – Эта команда выводит список файлов и каталогов в текущем рабочем каталоге.
  • | – Она объединяет команду ls с командой grep, чтобы предоставить все файлы в текущем каталоге команде grep для поиска файлов по расширению.
  • -i – Этот флаг позволяет команде grep искать определенный текстовый шаблон в файлах независимо от регистра букв.

Давайте выполним приведенную ниже команду, чтобы найти все файлы расширения «.conf» в текущем каталоге независимо от регистра букв.

ls | grep -i ".conf"

Теперь, когда вы использовали команды «find» и «ls», давайте обсудим еще одну команду для поиска файлов по расширениям в Linux.

4. Поиск файлов по расширениям с помощью команды locate

Команда «locate» – мощная утилита, используемая для поиска файлов и каталогов в большинстве систем Linux с помощью заранее созданной базы данных имен файлов и путей, что делает ее удобной и простой в использовании.

locate "<fileName>"

В большинстве систем Linux он поставляется предустановленным, однако если у вас его нет, вы можете установить его с помощью менеджера пакетов, как показано на рисунке.

sudo apt install mlocate [On Debian, Ubuntu and Mint]
sudo yum install mlocate [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/mlocate  [On Gentoo Linux]
sudo apk add mlocate [On Alpine Linux]
sudo pacman -S mlocate [On Arch Linux]
sudo zypper install mlocate [On OpenSUSE] 

После установки выполните следующую команду для обновления базы данных файлов, используемой командой locate в вашей системе.

sudo updatedb

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

locate ".xconf"

5. Поиск файлов по расширениям с помощью средств графического интерфейса

После того как мы рассмотрели все команды командной строки, давайте рассмотрим метод поиска файлов с помощью графического интерфейса. Некоторые предпочитают использовать графический интерфейс, а не команды CLI.

Чтобы найти файлы с нужными расширениями в любом файле, выполните следующие действия:

  • Откройте File Manager.
  • Перейдите в любую директорию, в которой вы хотите найти файлы.
  • Активируйте строку поиска и введите нужное расширение, например .zip, как показано на рисунке.

Мы успешно нашли все файлы с расширением .zip.

6. Как найти файлы по типу

Если вы хотите найти и отфильтровать файлы по их типу, вам нужно использовать опцию «-type».

Вы можете использовать следующие типы:

  • «f» для обычных файлов
  • «d» для каталогов
  • «b» для устройств блокировки
  • «l» для символических ссылок (симлинков)
  • «c» для character устройств

Например, если вы хотите найти все симлинки в каталоге /var, вы можете использовать эту команду:

find /var -type l

7. Как объединить несколько параметров и критериев в команде find

Вы можете объединить параметры в одну команду. Например, если вы хотите найти все симлинки, содержащие слово «example», вы можете использовать:

find /var -type l -iname "*example*"

По умолчанию при объединении опций они объединяются операндом «-and», что означает, что оба критерия должны быть истинными. Вы можете использовать операнд «-or», чтобы получить результаты, которые возвращают любой из вариантов. Например:

find -type -d -or -iname "example"

Эта команда выведет все каталоги И все файлы с именем «example». Если бы вы не использовали опцию «-or», то получили бы все каталоги с именем «example».

8. Как найти файлы по размеру

Еще одна полезная опция, которую можно использовать в команде find, – это опция «-size». Вы можете отфильтровать найденные файлы по размеру.

Фильтры по размеру, которые вы можете использовать:

  • «k» для кибибайтов (KiB, единицы измерения 1024 байта)
  • «M» для мегабайтов (MiB, единицы измерения 1024 * 1024 = 1048576байт)
  • «G» для гигабайтов (GiB, единицы 1024 * 1024 * 1024 =1073741824 байт)
  • «b» для 512-байтных блоков (это значение по умолчанию, если используется nosuffix)
  • «c» для байтов
  • «w» для двухбайтных слов

Так, например, чтобы найти все файлы размером более 1 ГБ в каталоге /home, можно использовать следующую команду:

find /home -size +1G

Если вы хотите найти файлы, размер которых меньше 1 ГБ, вы можете использовать:

find /home -size -1G

А чтобы найти все файлы размером ровно 1 ГБ, вы можете использовать:

find /home -size 1G

9. Как найти файлы по времени

С помощью команды find можно находить и фильтровать файлы по времени. Более конкретно, вы можете использовать следующие опции:

  • «-atime» – найти файлы по времени их последнего чтения или записи (Access Time)
  • «-mtime» – найти файлы по времени их последнего изменения (Modification Time)
  • «-ctime» – найти файлы по времени последнего изменения метаданных инода файла (Change Time)

По умолчанию параметры, используемые этими опциями, – дни. Например, чтобы найти файлы в каталоге /var, которые были изменены в течение последних 2 дней, можно использовать следующую команду:

find /var -mtime 2

По аналогии с опцией size, можно использовать операнды плюс и минус. Например, чтобы найти файлы, которые были изменены менее 2 дней назад, вы можете использовать:

find /var -mtime -2

Чтобы найти файлы, которые были изменены более 2 дней назад, вы можете использовать:

find /var -mtime +2

Вы также можете использовать минуты вместо дней. Для этого нужно использовать опцию «-mmin». Например, чтобы найти все файлы в каталоге /var, которые были изменены в течение последних 5 минут, вы можете использовать:

find /var -mmin 5

10. Как найти файлы на основе разрешений

Чтобы найти файлы с определенными разрешениями, можно использовать параметр «-perm». Например, чтобы найти все файлы с правами «777» в каталоге /var, можно использовать следующую команду:

find /var -perm 777

Чтобы найти все файлы в каталоге /var/ с правами не менее 644, выполните следующую команду:

find /var -perm -644

Это вернет файлы с правами выше 644, например 744, 777 и т. д.

11. Запуск команд для файлов, которые находит команда find

Если вы хотите запустить (выполнить) команды для файлов, которые находит команда find, вы можете использовать опцию «-execute», например:

find [CRITERIA] -exec [COMMAND] {} \;

В данном случае [CRITERIA] – это то, что вы используете в команде find, как мы показывали в предыдущих примерах. [КОМАНДА] – это команда, которую вы хотите выполнить для файлов, найденных командой find. Обязательно включите {} (это место для результатов команды find) и «\;» (это конец команды)

Примером, объединяющим предыдущие примеры, может быть поиск всех файлов в каталоге /var с правами 777 и обновление их разрешений до 744:

find /var -perm 777 -exec chmod 744 {} \;

12. Другие полезные опции, которые можно использовать в команде find

Мы не будем подробно останавливаться на них, но вы можете легко найти дополнительную информацию о них на странице man или просто в google.

  • «-maxdepth» задает максимальный уровень каталогов, в которых команда find будет искать файлы. Так что если у вас есть несколько подкаталогов, вы можете ограничить команду find, например, двумя подкаталогами.
  • «-delete» удаляет файлы, которые находит команда find. Вы можете добавить «-delete» в конец команды find, и она удалит все файлы, которые найдет.
  • «-O3» устанавливает уровень оптимизации на 3 – это сделает поиск самым быстрым. По умолчанию используется уровень «-O1»
  • «-user» и «-group» используются для фильтрации файлов на основе владения
  • «-empty» находит пустые файлы
  • «-read» находит читаемые файлы

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

Заключение

Расширения файлов – это суффикс, который появляется после . (dot) в имени файла. Иногда пользователи хотят найти файлы с определенным расширением. В данном руководстве представлено множество методов поиска файлов по расширениям.

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

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

Вдохновлен www.ubuntumint.com

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

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