为什么只需重命名文件扩展名就可以转换文件?

为什么只需重命名文件扩展名就可以转换文件?

当您使用不同的扩展名重命名文件时,大多数情况下它不起作用。但是,如果您有一个 .png 文件,您只需将其重命名image.pngimage.jpegimage.gif,它就会自动转换为其他格式并正常工作。这些格式之间是否有一些相似之处可以做到这一点?几年前我注意到了这一点,当我试图将一个.dvi文件转换为另一个.pdf文件时,我对此产生了兴趣;只需重命名它就可以了!

答案1

这可能是发生的情况。指定用于打开您提到的文件类型的文件的应用程序在所有这些文件中都是相同的。.gif、.jpg、.png:这些都由EOG(GNOME 的侏儒之眼)。我怀疑该应用程序不会根据扩展名确定文件类型,而是寻找神奇数字

请注意,EOG 的行为可能非常特殊,还请注意它没有进行实际转换。Linux 应用程序往往依赖于不同于文件扩展名的检测方法,尽管许多现代桌面实际上会查找文件扩展名来确定要打开哪个应用程序,因为这种方法可能更快。

所有这些可能都适用于 Ubuntu,但 Windows 则完全不同。Explorer 默认会将文件扩展名从文件名中截断。这样,名为“document.pdf”的文件将显示为“document”,而将其重命名为“document.dvi”实际上将被处理为“document.dvi.pdf”。病毒有时会利用此“功能”,让用户相信他们正在打开 .jpg,而实际上他们被诱骗运行恶意 exe!

为了真正确定文件类型,有一个名为的命令file可以显示详细的文件信息。

从我个人的经验来看,至少在我的系统上,EOG 无法被欺骗识别重命名的图像文件。你做的事情肯定和我不一样。

答案2

.png文件重命名为.jpeg.gif有效,因为与这些文件关联并被分配打开这些文件的程序是相同的,并且当它看到可以打开的扩展名时,它只需打开它们,因为它们都是图像文件,程序可以打开它们。

另一个回答者说默认程序是 EOG (Eye of Gnome)。即使你删除了扩展,它仍然可以打开它们。

至于 和dvipdf这两种文件类型同样由同一个程序打开,该程序名为 evince。因此,那里发生同样的事情。

答案3

我不知道文件转换是否自动进行。最有可能的是,使用的应用程序解决了这个问题,或者应用程序自动转换了文件。

在命令行上,您还可以使用它file来提供有关文件的一些基本信息,例如

cp test.png test.png.jpg
file test.png.jpg

输出:

test.png.jpg: PNG image data, 557 x 237, 8-bit/color RGB, non-interlaced

查看file手册页

man file

您可以使用convert(它在包中imagemagick或者更确切地说imagemagick-6.q16)或其他工具来转换文件。

convert test.png test.jpg
file test.jpg 

输出:

test.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 557x237, components 3

有些工具可能不会受到“错误”文件扩展名的影响(因为它们会忽略它们),如接受的答案,但我不会依赖它总是起作用。


提示:file您可以创建一个简单的脚本来搜索具有错误文件格式的文件。

答案4

这些格式之间是否有一些相似之处可以实现这一点?

尽管这两种文件格式之间存在一些相似之处,但主要问题是文件名中的扩展名并不总是代表其所描述的文件类型。在 Linux 中,这是理所当然的,因为您总是指定要用来打开文件的程序。

您甚至可以使用 GNUcmp实用程序以及--verbose --bytes=100限制和查看不同字节的选项来比较这两个文件,以检查它们之间是否真的存在差异。我还鼓励您在终端上显示标题,以免less溢出,或者更好的是,head -c 100只查看前 100 个字节,以了解cmp您的操作系统实际读取的内容。无论是在 Ubuntu 还是 Windows 中,我都无法发现差异。使用 Windows 上的 Paint 将 PNG 保存为 JPG 格式确实将标题从 PNG 更改为 JFIF,随后将其内容更改为 JFIF。

我个人更熟悉 Windows 文件系统。扩展名的存在是为了让操作系统能够更快地识别与其关联的程序,用户可以通过在上下文菜单上选择“打开方式...”时选择默认程序来修改扩展名。您还可以通过启动regedit和导航到 Windows 已安装的程序来查看 Windows 识别的所有扩展名,以调查 Windows 如何感知“txt”文件扩展名。我个人使用注册表编辑器将带有值的HKCR\.txt字符串添加到不同的扩展名,以便能够在 Windows 文件资源管理器的预览窗格上预览文件的文本内容。Content Typetext/plain

请不要因为我谈论 Windows 而讨厌我。我只是觉得指出这一点很有趣,因为许多 Windows 用户不知道他们的 Windows 机器的内部工作原理。

相关内容