用find列出所有图形图像文件?

时间:2013-05-26 09:57:34

标签: linux graphics find

这个巨大的档案中有很多类型的图形图像,如.jpg,.gif,.png等。我不知道所有类型。有没有办法找到'能够让它列出所有图形图像而不管它们的点扩展名是什么?谢谢!

6 个答案:

答案 0 :(得分:48)

这应该可以解决问题

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

答案 1 :(得分:25)

以下更适合我,因为在我的情况下,我想将这个文件列表传输到另一个程序。

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

如果您想将图片放在焦点上(正如评论中的某些人所说)

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

答案 2 :(得分:11)

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

甚至应该更好。

答案 3 :(得分:6)

仅对“图像”进行格式化或使用awk不会这样做。 PSD文件将由带有大写“I”的“Image”标识,因此我们需要将regexp改进为不区分大小写或者还包括大写I.EPS文件根本不包含单词“image”,所以我们还需要根据您的需要匹配“EPS”或“Postscript”。所以这是我的改进版本:

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

答案 4 :(得分:1)

与同一问题相关,我刚刚发布了一个名为 photofind We came to the conclusion)的工具。它的行为类似于普通的find-command,但专门用于图像文件,并且还支持基于存储在图像文件中的EXIF信息过滤结果。有关详细信息,请参阅链接的github-repo。

答案 5 :(得分:0)

与选择的答案相比,以下是更有效的解决方案:

find . -type f -print0 |
  xargs -0 file --mime-type |
  grep -F 'image/' |
  cut -d ':' -f 1
  1. 使用-type f代替-name '*',因为前者仅搜索文件,而后者同时搜索文件和目录。
  2. xargs用尽可能多的参数执行file,这与find -exec file {} \;所执行的每次发现都快得多的file相比。
  3. grep -F更快,因为我们只想匹配固定字符串。
  4. cutawk快(据我所记得,快5倍以上)。