回答:
-o
異なるパラメーター間でフラグを使用します。
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
魅力のように機能します。
注ブラケットとその内容の間にスペースが必要です。スペースがないと機能しません。
説明:
type -f
-ファイルのみを検索(ディレクトリは検索しない)\(
- type -f
すべての引数に適用するために必要-o
-論理OR演算子-iname
-に似て-name
いますが、大文字と小文字は区別されませんtype -f
拡張し、括弧なしの両方式に適用されます、だから、しないfind ./ -type f -iname \*.jpg -o -type f -iname \*.png
も動作します...それは長く:-) 2つの文字だが
a * b + c
異なっているa * (b + c)
Shadurによって提案さ-o
れたように基準を組み合わせることができます。-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
拡張機能をより簡潔に組み合わせるために使用できます。デフォルトの正規表現構文は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
複数のパターンに一致するパターン