findコマンドを使用して複数の拡張機能を検索する方法


回答:


153

-o異なるパラメーター間でフラグを使用します。

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) 魅力のように機能します。

ブラケットとその内容の間にスペースが必要です。スペースがないと機能しません。

説明:

  • type -f -ファイルのみを検索(ディレクトリは検索しない)
  • \(- type -fすべての引数に適用するために必要
  • -o -論理OR演算子
  • -iname-に似て-nameいますが、大文字と小文字は区別されません

括弧が必要ですか?このコマンドは、それらがなくても機能します。いくつかのシェルに必要ですか?
MikeD

2
@mikedコマンドはそれらなしでも「機能」しますが、.pngで終わるディレクトリと.jpgで終わるファイルでヒットすることになります。これは意図したとおりではありません。
シャドゥール

1
明確にしてくれてありがとう!type -f拡張し、括弧なしの両方式に適用されます、だから、しないfind ./ -type f -iname \*.jpg -o -type f -iname \*.pngも動作します...それは長く:-) 2つの文字だが
MikeD

2
演算子の優先順位の問題です。同じようにa * b + c異なっているa * (b + c)
Shadur

2
@jdhao良いキャッチ、修正。
シャドゥール

86

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.JPGimage.PnG
ccpizza

40

これはより正確です:

find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'

10
なぜ「もっと」正しいと言うのですか?
ケビン

2
ので、私は推測する@Kevin -iregexマッチjpgなどJPG Jpg jpGなど。これ$は必要ないと思います。
ott--

これはMinGWで正常に機能します。
ピーターモーテンセン

2
最初に、エラーをスローする最初の引数として検索フォルダーを省略しました。第二に、OSXではカッコがエスケープされないため、代わりにこれを使用する必要がありfind -E . -iregex '.*\.(jpg|png|gif)'ます。@ sorinの回答に示されているとおりです。
ccpizza

8

明確にするために、Linux、Unix、およびmacOSフレーバーで機能する唯一のオプションは次のとおりです。

find -E . -regex '.*\.(jpg|png)'

これは、OS Xバージョンが少し異なるためですが、ほとんどのプラットフォームでうまくいくことを書くためにそれは重要です。


2
-Eフラグは、Ubuntuの14.04で見つけるためには有効ではありません
gogaman

-EフラグはMinGWでも無効です(少なくとも、試してみたバージョン/構成(特定のバージョンのデフォルト構成))。
ピーターモーテンセン

-type f \( -iname \*.png -o -iname \*.jpg\)OSXでは動作しないのはどの部分ですか?
シャドゥール

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.