Ответы:
Используйте -o
флаг между различными параметрами.
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
работает как шарм.
ПРИМЕЧАНИЕ Между скобкой и ее содержимым должен быть зазор, иначе он не будет работать.
Объяснение:
type -f
- только поиск файлов (не каталогов)\(
- необходимо для type -f
применения ко всем аргументам-o
- логический оператор ИЛИ-iname
- нравится -name
, но совпадение нечувствительно к региструtype -f
не распространяется и не применяется к обоим выражениям без скобок, поэтому find ./ -type f -iname \*.jpg -o -type f -iname \*.png
также работает ... хотя он на два символа длиннее :-)
a * b + c
отличается отa * (b + c)
Вы можете комбинировать критерии с , -o
как было предложено Shadur . Обратите внимание, что он -o
имеет более низкий приоритет, чем сопоставление, поэтому вам могут понадобиться скобки.
find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \) # all .jpg or .png images modified in the past week
В Linux, вы можете использовать , -regex
чтобы объединить расширения в terser образом. Синтаксис регулярного выражения по умолчанию - Emacs ( базовые регулярные выражения плюс несколько расширений, например, \|
для чередования); есть возможность переключиться на расширенные регулярные выражения .
find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'
В FreeBSD, NetBSD и OSX вы можете использовать в -regex
сочетании с -E
расширенными регулярными выражениями.
find -E . -regex '.*\.(jpg|png)'
-iname
вместо -name
- тогда вы также захватите image.JPG
иimage.PnG
Это более правильно:
find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
-iregex
совпадает jpg
так же, как JPG Jpg jpG
и тому подобное. Я думаю, что $
это не нужно.
find -E . -iregex '.*\.(jpg|png|gif)'
как показано в ответе @ sorin.
Чтобы было понятно, единственная опция, которая работает в Linux, Unix и MacOS:
find -E . -regex '.*\.(jpg|png)'
Это потому, что версия OS X немного отличается, но важно писать вещи, которые хорошо работают на большинстве платформ.
-type f \( -iname \*.png -o -iname \*.jpg\)
не работает на OSX?
find -name
шаблон, который соответствует нескольким шаблонам в SO