web-dev-qa-db-ja.com

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

次のコマンドを使用すると、すべてのjpg画像を取得できます。

find . -name "*.jpg"  

しかし、どのようにしてpngファイルも結果に追加できますか?

143
wong2

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

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

[〜#〜] note [〜#〜]そこにmustブラケットとそのコンテンツの間にスペースがあるか、勝ちます動作しません。

説明:

  • _-type f_-ファイルのみを検索します(ディレクトリは検索しません)
  • _\(_&_\)_-_-type f_がすべての引数に適用されるために必要です
  • _-o_-論理OR演算子
  • _-iname_-_-name_に似ていますが、一致では大文字と小文字が区別されません
176
Shadur

基準を-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を使用して拡張機能を簡潔に組み合わせることができます。デフォルトの正規表現の構文は、Emacs( 基本正規表現 に加えて、\|の代替などのいくつかの拡張機能)です。 extended regexps に切り替えるオプションがあります。

find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'

FreeBSD、NetBSDおよびOSXでは、拡張正規表現に対して-regex-Eを組み合わせて使用​​できます。

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

これはより正しいです:

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

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

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

これは、OS Xのバージョンが少し異なるためですが、ほとんどのプラットフォームで適切に動作するものを作成することが重要です。

9
sorin