Вопрос или проблема
Я могу получить все 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
-
Структура команды:
Основная структура команды выглядит следующим образом:find [путь] [параметры]
Например, для поиска изображений в текущей директории:
find . -name "*.jpg"
-
Поиск по нескольким расширениям:
Чтобы добавить другие расширения в результат, используется флаг-o
(логический оператор "ИЛИ"). Для корректного применения этого оператора необходимо обернуть все условия в круглые скобки. Пример команды, которая ищет как фотографии в формате.jpg
, так и.png
:find . -type f \( -iname "*.jpg" -o -iname "*.png" \)
Важно учесть:
- -type f — этот параметр гарантирует поиск только по файлам, исключая директории.
- ( и ) — круглые скобки необходимы для группировки условий. Обратите внимание на пробелы вокруг скобок, их наличие критично.
-
Использование регистронезависимого поиска:
Параметр-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-специалистов. Подходите к поиску файлов с учетом того, какие именно условия вам нужны, и вы без труда найдете все необходимые данные.