Как использовать команду find для поиска нескольких расширений

Вопрос или проблема

Я могу получить все jpg изображения с помощью:

find . -name "*.jpg"  

Но как я могу добавить png файлы к результатам?

Используйте флаг -o между различными параметрами.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) работает как charm.

ПРИМЕЧАНИЕ Должен быть пробел между скобкой и её содержимым, иначе это не сработает.

Объяснение:

  • -type f – искать только файлы (не директории)
  • \( & \) – нужны для применения -type f ко всем аргументам
  • -o – логический оператор ИЛИ
  • -iname – как -name, но совпадение нечувствительно к регистру

Вы можете комбинировать критерии с помощью -o, как предложил Шадур. Обратите внимание, что -o имеет более низкий приоритет, чем сопоставление, поэтому вам могут понадобиться скобки.

find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( -name '*.jpg' -o -name '*.png' \)  # все .jpg или .png изображения, измененные за последнюю неделю

На Linux вы можете использовать -regex для более компактного комбинирования расширений. Синтаксис регулярных выражений по умолчанию – это Emacs (базовые regexps плюс несколько расширений, таких как \| для альтернативы); есть возможность переключиться на расширенные regexps.

find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'

На FreeBSD, NetBSD и OSX вы можете использовать -regex, комбинируя с -E для расширенных regexps.

find -E . -regex '.*\.(jpg|png)'

Это более корректно:

find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'

Чтобы стало ясно, единственный вариант, который работает на Linux, Unix и macOS, это:

find -E . -regex '.*\.(jpg|png)'

Это потому, что версия OS X немного отличается, но важно написать вещи, которые хорошо работают на большинстве платформ.

Если нужны только файлы:

find ./ -type f -regex '.*\.\(jpg\|png\)$'

Например, это не будет совпадать с директорией с именем “blah.jpg”.

Ответ или решение

Чтобы осуществить поиск файлов с несколькими расширениями с помощью команды find, необходимо знать несколько ключевых элементов и нюансов ее использования. Команда find позволяет находить файлы в файловой системе на основе заданных вами критериев. Рассмотрим, как можно эффективно использовать эту команду для поиска изображений форматов .jpg и .png.

Основные параметры команды find

  1. Структура команды:
    Основная структура команды выглядит следующим образом:

    find [путь] [параметры]

    Например, для поиска изображений в текущей директории:

    find . -name "*.jpg"
  2. Поиск по нескольким расширениям:
    Чтобы добавить другие расширения в результат, используется флаг -o (логический оператор "ИЛИ"). Для корректного применения этого оператора необходимо обернуть все условия в круглые скобки. Пример команды, которая ищет как фотографии в формате .jpg, так и .png:

    find . -type f \( -iname "*.jpg" -o -iname "*.png" \)

    Важно учесть:

    • -type f — этот параметр гарантирует поиск только по файлам, исключая директории.
    • ( и ) — круглые скобки необходимы для группировки условий. Обратите внимание на пробелы вокруг скобок, их наличие критично.
  3. Использование регистронезависимого поиска:
    Параметр -iname используется для поиска расширений без учета регистра, что позволяет находить файлы с расширениями .JPG, .jpg, и т.д.

Примеры использования

Поиск файлов, измененных за последнюю неделю:

Для поиска изображений формата .jpg и .png, измененных за последние 7 дней, используйте следующую команду:

find . -mtime -7 \( -name "*.jpg" -o -name "*.png" \)

Этот запрос вернет файлы, соответствующие заданным критериям.

Использование регулярных выражений:

На системах Linux можно использовать флаг -regex, что позволяет упростить поиск:

find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'

Эта команда отобразит все файлы, заканчивающиеся на .jpg или .png.

Специфика для macOS и BSD

На системах macOS и FreeBSD используется немного отличающаяся версия команды:

find -E . -regex '.*\.(jpg|png)'

Это позволяет применить расширенные регулярные выражения к вашему запросу.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...