“file” 无法识别多种文件类型的文件扩展名

“file” 无法识别多种文件类型的文件扩展名

在 macOS(或许还有其他 *nix 系统)上file命令的--extension选项???大部分时间都输出,以至于它毫无用处。

使用示例来自 Wikipedia 的示例 PNG

$ file /Users/name/PNG_transparency_demonstration_1-1.png
/Users/vitor/Desktop/PNG_transparency_demonstration_1-1.png: PNG image data, 800 x 600, 8-bit/color RGBA, non-interlaced

$ file --mime-type --brief 
/Users/name/PNG_transparency_demonstration_1-1.png

$ file --extension --brief /Users/name/PNG_transparency_demonstration_1-1.png
???

它可以识别我输入的大多数文件的类型,但不能识别它们的扩展名,无论是 PNG、MKV、MP4、PDF 还是……

为什么会这样?为什么要包含一个很少提供有意义信息的选项?

答案1

根据man file

 --extension
         Print a slash-separated list of valid extensions for the file type found.

这取决于file通过查看文件内容可以识别什么。例如,如果你创建随机文件,它就无法识别它

A1398% echo "test" >> test
A1398% file --extension test**
test:    ???

如果你用凯卡它会将其识别为 7z/cb7 格式(它似乎可以识别的少数文件格式之一)。

A1398% file --extension test**
test:    ???
test.7z: 7z/cb7

即使你用不同的文件扩展名重命名它 - 例如在这里我使用.jpg

A1398% mv test.7z test_renamed.jpg
A1398% file --extension test**
test:             ???
test_renamed.jpg: 7z/cb7

找到它的原因是它被定义!:ext/usr/share/file/magic/compress

# 7-zip archiver, from Thomas Klausner ([email protected])
# https://www.7-zip.org or DOC/7zFormat.txt
#
0   string      7z\274\257\047\034  7-zip archive data,
>6  byte        x           version %d
>7  byte        x           \b.%d
!:mime  application/x-7z-compressed
!:ext 7z/cb7

Mojave 使用 5.33 版本, .png未找到,因为未定义/usr/share/file/magic/images-!:ext缺少标签:

# Standard PNG image.
0   string      \x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0DIHDR PNG image data
!:mime  image/png
!:strength +10
>16 use     png-ihdr

# Apple CgBI PNG image.
0   string      \x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x04CgBI
>24 string      \x00\x00\x00\x0DIHDR    PNG image data (CgBI)
!:mime  image/png
!:strength +10
>>32    use     png-ihdr

在最新版本(5.37)中来源 .png被定义为扩展。

# Standard PNG image.
0   string      \x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0DIHDR PNG image data
!:mime  image/png
!:ext   png
!:strength +10
>16 use     png-ihdr

# Apple CgBI PNG image.
0   string      \x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x04CgBI
>24 string      \x00\x00\x00\x0DIHDR    PNG image data (CgBI)
!:mime  image/png
!:ext   png
!:strength +10
>>32    use     png-ihdr

你找不到的原因.png因此似乎是因为 Apple 使用的是旧版本。

为什么不能识别某些特定文件类型的更普遍的问题file是因为有人必须识别文件结构中独特的东西并将其添加到定义中。

相关内容