次を使用して、すべてのjpg
画像を取得できます。
find . -name "*.jpg"
しかし、png
ファイルも結果に追加するにはどうすればよいですか?
コメント
回答
異なるパラメーター間で-o
フラグを使用します。
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
は魅力のように機能します。
注ブラケットとその内容の間にスペースが必要です 動作しません。
説明:
-
-type f
-ファイルのみを検索します(ディレクトリは検索しません) -
\(
&\)
–-type f
をすべての引数に適用するには -
-o
-論理OR演算子 -
-iname
–-name
と同様ですが、一致は大文字と小文字を区別しません
コメント
- 括弧は必要ですか。コマンドはそれらなしで私のために働きます。一部のシェルには必要ですか?
- @mikedコマンドは"機能します"はい、しかし'は、.pngで終わるディレクトリや、.jpgで終わるファイルでヒットすることになりますが、これは意図したとおりではありません。
- 明確にしてくれてありがとう!
type -f
は拡張されず、括弧なしの両方の式に適用されます。したがって、find ./ -type f -iname \*.jpg -o -type f -iname \*.png
も機能します…ただし' 2文字長くなります:-) - '演算子の優先順位の問題です。
a * b + c
がa * (b + c)
- @jdhaoと異なるように、良いキャッチ、修正されました。
回答
と基準を組み合わせることができます。
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(基本的な正規表現と\|
などのいくつかの拡張機能です)。 拡張正規表現に切り替えるオプションがあります。
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\)$"
コメント
- "もっと"正しいと言うのはなぜですか?
- @Kevin
-iregex
はjpg
およびJPG Jpg jpG
など。$
は'必要ないと思います。 - これは MinGW で正常に機能します。
- 最初に、最初の引数として検索フォルダーを省略しました。エラー。次に、OSXでは括弧をエスケープしても機能しないため、代わりにこれを使用する必要があります:@sorin 'の回答に示されているように
find -E . -iregex '.*\.(jpg|png|gif)'
。
回答
明確にするために、Linux、Unix、macOSフレーバーで機能する唯一のオプションは次のとおりです。
find -E . -regex ".*\.(jpg|png)"
これは、OS Xのバージョンが少し異なるためですが、ほとんどのプラットフォームでうまく機能するものを作成するために重要です。
コメント
- -EフラグはUbuntu14.04での検索には無効です
- -Eフラグは
MinGW のいずれか(少なくとも、試してみたバージョン/構成(特定のバージョンのデフォルト構成))。
-type f \( -iname \*.png -o -iname \*.jpg\)
はOSXで機能しませんか?-type f \( -iname \*.png -o -iname \*.jpg\)
がOSXで機能することを確認できます
find -name
複数のパターンに一致するパターン SOfind . | egrep '.jpg|.png'
たくさん。