从 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 }'
它能做什么?
- 搜索该类型的所有 inode
file
- 执行命令文件,获取文件的 jpeg 标头,例如:
image/jpeg
awk
编辑:添加了 @Franklin 提示,在输出文件类型时使用文件来-i
使用 mime 字符串标准。这将减少 jpeg 单词的误报。
编辑2:添加了@don_crissti 提示。现在仅过滤最后一列,awk
如果与 匹配则打印整行image/jpeg
。将开关更改file
为--mime-type
抑制字符集信息