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

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

jpg以下を使用してすべての画像を取得できます。

find . -name "*.jpg"  

pngしかし、結果にファイルを追加するにはどうすればよいですか?

答え1

-oさまざまなパラメータ間でフラグを使用してください。

find ./ -type f \( -iname \*.jpg -o -iname \*.png \)奇跡的に動作します。

ノートそこ〜しなければならない角かっこと内容の間にスペースが必要です。それ以外の場合は動作しません。

説明する:

  • -type f- ファイルのみ検索(ディレクトリを除く)
  • \(& \)--type fすべてのパラメーターに適用する必要があります。
  • -o- 論理OR演算子
  • -iname- 似ています-nameが、一致するかどうかは大文字と小文字を区別しません。

答え2

-o条件文をasと組み合わせることができます。シャドールが提案。接続よりも優先順位が低いため、-o括弧が必要な場合があります。

find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( -name '*.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)'

答え3

これがより正確です:

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

答え4

ファイルのみが必要な場合:

find ./ -type f -regex '.*\.\(jpg\|png\)$'

たとえば、「blah.jpg」というディレクトリと一致しません。

関連情報