在 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
是因为有人必须识别文件结构中独特的东西并将其添加到定义中。