当 .jpg 扩展名不是必需的时,如何在文件系统上查找所有 JPG 文件?

Abd*_*red 9 command-line find jpeg

从 Windows 切换到 Linux 时,我注意到的第一件事是,Linux 没有严格的命名约定,也没有强制性的文件扩展名,例如 .bmp、.jpg、.exe 等。因此,我无法通过文件名本身来判断其文件格式。

如果我的文件系统上的所有 JPEG 文件都有 .jpg 扩展名,我可以通过以下方式简单地找到所有 JPEG 文件:

find / -type f -name "*.jpg"
Run Code Online (Sandbox Code Playgroud)

但如果不是这种情况,我不知道如何找到所有 JPEG 文件。

小智 19

如果要抓取目录和子目录:

find /home/place/to/crawl -type f -exec file --mime-type {}  \; | awk '{if ($NF == "image/jpeg") print $0 }'
Run Code Online (Sandbox Code Playgroud)

它能做什么?

  • 搜索具有该类型的所有 inode file
  • 执行命令文件,以获取文件的 jpeg 标题,例如: image/jpeg
  • awk

编辑:添加@Franklin 提示,以-i在输出文件类型时使用文件以使用 mime 字符串标准。这将减少 jpeg 单词的误报。

编辑 2:添加了 @don_crissti 提示。现在只过滤最后一列,awk如果与 匹配,则打印整行image/jpeg。将file开关更改--mime-type为抑制字符集信息

  • 使用 `file -i` 打印 MIME 类型,如 `image/jpeg`。这对 grep 来说更容易也更可靠,因为保证 MIME 类型永远不会改变。此外,很容易列出所有/任何图像格式。列出所有 JPEG 图像的示例:`find /home/dir/example -type f -exec file -i {} \; | grep ':图像/jpeg\>'` (3认同)