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

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

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

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

find / -type f -name "*.jpg"

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

答案1

如果您想在目录和子目录上爬行:

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

它能做什么?

  • 搜索该类型的所有 inodefile
  • 执行命令文件,获取文件的 jpeg 标头,例如:image/jpeg
  • awk

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

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

相关内容