Ответы:
Используйте -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