web-dev-qa-db-ja.com

findコマンドを使用して、リストから拡張子を持つすべてのファイルを検索する方法は?

ディレクトリ(gif、png、jpg、jpeg)からすべての画像ファイルを見つける必要があります。

find /path/to/ -name "*.jpg" > log

.jpgファイルだけでなく、この文字列を変更する方法は?

164
Kirzilla
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
167
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg'

働くでしょう。もっとエレガントな方法があるかもしれません。

127
JoseK

find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log

-Eを使用すると、正規表現の括弧とパイプをエスケープする必要がなくなります。

24
tboyce12
find /path/to/ -type f -print0 | xargs -0 file | grep -i image

これは、fileコマンドを使用して、ファイル名(または拡張子)に関係なく、ファイルの種類を認識しようとします。

/path/toまたはファイル名に文字列imageが含まれる場合、上記は偽のヒットを返す可能性があります。その場合、私はお勧めします

cd /path/to
find . -type f -print0 | xargs -0 file --mime-type | grep -i image/
11
unutbu

上記の@Dennis Williamsonの応答の補足として、同じ正規表現でファイル拡張子の大文字と小文字を区別しないようにするには、-iregexを使用します。

find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
6
TCW
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
5
ghostdog74

Mac OSで使用する

find -E packages  -regex ".*\.(jpg|gif|png|jpeg)"
1
7ynk3r
find -regex ".*\.\(jpg\|gif\|png\|jpeg\)"
1
shrikant