如何按内容查找图像文件

Ste*_*fan 6 bash file-command

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

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

pidgin.tar.gz
photo01.jpg
picture01
screenshot.gif
invoice.pdf
Run Code Online (Sandbox Code Playgroud)

那么我只想选择:

photo01.jpg
picture01
screenshot.gif
Run Code Online (Sandbox Code Playgroud)

笔记:

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

Gil*_*il' 7

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

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