![当 .jpg 扩展名不是必需的时,如何查找文件系统上的所有 JPG 文件?](https://linux22.com/image/5738/%E5%BD%93%20.jpg%20%E6%89%A9%E5%B1%95%E5%90%8D%E4%B8%8D%E6%98%AF%E5%BF%85%E9%9C%80%E7%9A%84%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E6%9F%A5%E6%89%BE%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E7%9A%84%E6%89%80%E6%9C%89%20JPG%20%E6%96%87%E4%BB%B6%EF%BC%9F%20.png)
从 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
抑制字符集信息