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


179

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

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

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

回答:


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

6
Macでは動作しませんが、-E(拡張)オプションで動作します(おそらくパイプは拡張機能ですか?):find -E / path / to -iregex "。* \。(jpg | gif | png | jpeg) ">ログ
2015年

138
find /path/to/  \( -iname '*.gif' -o -iname '*.jpg' \) -print0

動作します。よりエレガントな方法があるかもしれません。


16
-inameは大文字と小文字を区別しません
Chris Koston、

1
@Gerald:OR式をエスケープされた括弧でグループ化する必要がある可能性があります。find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;それ以外の場合、execは最後の部分にのみ適用されます(-iname '*.jpg' この場合)。
追って通知があるまで一時停止。

それは重要な発言です。find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0JPGファイルのみを印刷します!あなたはここに括弧が必要:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
アン・バン・ロッサム

28

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

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


2
私の発見にはこれがありません-E
wieczorek1990 '18

1
うーん、-Eオプションはfind「拡張正規表現」を使用するように指示します。他のいくつかのツールにも同様のオプションがありますが、このオプションがすべてのUNIXディストリビューションで使用できるかどうかはわかりません。
tboyce12 14

8
Mac OSでも動作します。
c.gutierrez 2014

2
@ tboyce12 ubuntuで作業しているときに、-regextypeを指定して正規表現を簡略化できますfind . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
doub1ejack 2015年

1
@cjmたぶんfind -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log-iregexフラグを使用すると、find大文字と小文字を区別せずに一致します。
tboyce12 2017年

11
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/

申し訳ありませんが、そこに誤ったクリックがあり、私は明らかに投票を取り消すことはできません... :(
マーク・シンプソン

6
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)

2
name / inameパラメータの周りに(エスケープされた)括弧を追加した理由を説明できますか?
Bart Kleijngeld 2017

矛盾の理由はありますか?-iname *.jpg-o -name *.jpeg-o -iname *gifすべてのわずかに異なるフォーマットを持っています。
放棄されたカート

少なくとも他の回答との違いを説明できれば。
el-teedee

6

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

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

5

Mac OSでの使用

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


-1

ファイルに拡張子がない場合、ファイルのMIMEタイプを検索できます

find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'

ここで(audio | video | matroska | mpeg)はMIMEタイプの正規表現です

&それらを削除する場合:

find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
  rm "$f"
done

または、それらの拡張子以外のすべてを削除します。

find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
  rm "$f"
done

〜ではなく!〜に注意してください

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