Я могу получить все jpg
изображения с помощью:
find . -name "*.jpg"
Но как я могу добавить png
файлы к результатам?
find
regular-expression
wong2
источник
источник
find -name
шаблон, который соответствует нескольким шаблонам в SOОтветы:
Используйте
-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
имеет более низкий приоритет, чем сопоставление, поэтому вам могут понадобиться скобки.В Linux, вы можете использовать ,
-regex
чтобы объединить расширения в terser образом. Синтаксис регулярного выражения по умолчанию - Emacs ( базовые регулярные выражения плюс несколько расширений, например,\|
для чередования); есть возможность переключиться на расширенные регулярные выражения .В FreeBSD, NetBSD и OSX вы можете использовать в
-regex
сочетании с-E
расширенными регулярными выражениями.источник
-iname
вместо-name
- тогда вы также захватитеimage.JPG
иimage.PnG
Это более правильно:
источник
-iregex
совпадаетjpg
так же, какJPG Jpg jpG
и тому подобное. Я думаю, что$
это не нужно.find -E . -iregex '.*\.(jpg|png|gif)'
как показано в ответе @ sorin.Чтобы было понятно, единственная опция, которая работает в Linux, Unix и MacOS:
Это потому, что версия OS X немного отличается, но важно писать вещи, которые хорошо работают на большинстве платформ.
источник
-type f \( -iname \*.png -o -iname \*.jpg\)
не работает на OSX?Используй это.
источник