web-dev-qa-db-ja.com

findですべてのグラフィック画像ファイルをリストしますか?

この巨大なアーカイブには、.jpg、.gif、.pngなど、多くのタイプのグラフィックイメージがあります。すべてのタイプを知っているわけではありません。 「find」を使用して、ドット拡張子名に関係なくすべてのグラフィック画像をリストできるようにする方法はありますか?ありがとう!

43
Edward

これはトリックを行う必要があります

find . -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image'

出力例:

./navigation/doc/Sphärische_Trigonometrie-Dateien/bfc9bd9372f650fd158992cf5948debe.png: PNG image
./navigation/doc/Sphärische_Trigonometrie-Dateien/6564ce3c5b95ded313b84fa918b32776.png: PNG image
./navigation/doc/subr_1.jpe: JPEG image
./navigation/doc/Astroanalytisch-Dateien/Gamma.gif: GIF image
./navigation/doc/Astroanalytisch-Dateien/deltaS.jpg: JPEG image
./navigation/doc/Astroanalytisch-Dateien/GammaBau.jpg: JPEG image
51
j.holetzeck

私の場合、このファイルのリストを別のプログラムにパイプしたかったので、次の方が適しています。

find . -type f -exec file {} \; | awk -F: '{if ($2 ~/image/) print $1}'

(コメントの誰かとして)イメージをtarしたい場合は

find . -type f -exec file {} \; | awk -F: '{if ($2 ~/image/) printf("%s%c", $1, 0)}' | tar -cvf /tmp/file.tar --null -T -
25
f3xy
find . -type f -exec file {} \; | grep -o -P '^.+: \w+ image'

より良いはずです。

11
Nicolas Appriou

「イメージ」のみにawkをグレープまたは使用しても、それは行われません。 PSDファイルは大文字の「Image」で識別されるため、大文字と小文字を区別しないか、大文字のIを含めるように正規表現を改善する必要があります。EPSファイルには「image」という単語がまったく含まれないため、必要に応じて「EPS」または「Postscript」にも一致する必要があります。だからここに私の改良版があります:

find . -type f -exec file {} \; | awk -F: '{ if ($2 ~/[Ii]mage|EPS/) print $1}'
6
fltman

同じ問題に関連して、photofind(- https://github.com/trimap/photofind というツールを公開しました)。通常の検索コマンドのように動作しますが、画像ファイルに特化しており、画像ファイル内に保存されているEXIF情報にも基づいて結果のフィルタリングをサポートしています。詳細については、リンクされたgithub-repoを参照してください。

1
juusor