如何按内容查找图像文件

如何按内容查找图像文件

我有一个文件列表,我需要查找所有图像文件从该列表中。

例如,如果我的列表包含以下内容:

pidgin.tar.gz
photo01.jpg
picture01
screenshot.gif
invoice.pdf

那么我只想选择:

photo01.jpg
picture01
screenshot.gif

笔记:

  • 方法不得依赖于文件扩展名
  • Photoshop 和 Gimp 的模糊图像格式可以忽略。 (如果feh无法显示,则不是图像)

答案1

以下命令列出了list_file包含图像文件名称的行:

<list_file xargs -d \\n file -i | sed -n 's!: *image/[^ :]*$!!p'
  • file -i FOO查看 的前几个字节以FOO确定其格式并打印一行FOO: image/jpeg-i表示显示 MIME 类型;它特定于 Linux 上的 GNU 文件)。
  • xargs -d \\n从标准输入读取文件列表(每行一个)并对它应用后续命令。 (这需要 Linux 上的 GNU xargs;在其他系统上,省略-d \\n,但文件列表不能包含\'"空格或空格)。
  • sed命令过滤掉: image/FOO后缀,只显示文件名。它忽略与图像文件不对应的行。

答案2

file -ib image | awk '"^image/" {print}'

如果文件检测到图像,它应该打印如下行:

image/jpeg; charset=binary

它适用于幻数,因此它不基于扩展。它

答案3

除了file命令之外,您还可以使用 ImageMagick。以下将显示当前目录中所有文件的类型:

find -type f -depth 0 -print0 | xargs -0 identify

identify命令将为各种文件类型打印出如下内容:

text.txt[8] TXT 612x792 612x792+0+0 16-bit DirectClass 694B 0.320u 0:00.330
php.jpg[31] JPEG 1280x1024 1280x1024+0+0 8-bit DirectClass 195KB 0.000u 0:00.000

动画 GIF 文件将打印更多信息(这是 21 帧 GIF):

adhd.gif[0] GIF 211x200 211x200+0+0 8-bit PseudoClass 256c 233KB 0.000u 0:00.029
adhd.gif[1] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.029
adhd.gif[2] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.029
...
adhd.gif[18] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000
adhd.gif[19] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000
adhd.gif[20] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000

然后,您可以使用awk或类似的工具来决定如何处理它们。

答案4

也许我缺少一些东西,但这似乎对我有用:

file -i * | grep "image/" | cut -d: -f1

相关内容