如何在不影响内容的情况下增加文件的字节大小?

如何在不影响内容的情况下增加文件的字节大小?

有没有一种方法可以轻松任意地增加文件的字节大小而不破坏其内容?例如,通过插入虚拟字节。我的用例的文件类型是 png。

我在 OS X 上,但欢迎所有解决方案。

答案1

根据定义,对你的问题的字面答案是否定的。文件的大小是其内容的长度。如果你想改变大小,你需要改变内容。

然而,有可能改变内容并获得等效内容大小不同。这是否可行取决于文件格式以及您认为的等效内容。

例如,如果文件是 PNG 图像,并且您认为如果显示的图像相同,则两个包含 PNG 图像的文件是等效的,您可以通过在文件中添加(或加长)注释字段来增大文件大小。例如图像魔术师

convert old.png -comment 'This comment will be added to the image file, making it larger' new.png

最大便携评论大小为2GB(您可能能够达到 4GB)。原则上,您可以添加多个注释(或使用其他字段名称),但我不知道常用程序是否能很好地支持这一点。

继续使用 PNG 图像作为示例,许多程序接受包含有效 PNG 图像和额外内容的文件,就好像它只是没有这些额外内容的 PNG 图像一样。因此,如果您附加了尾随垃圾,许多程序仍会接受该图像:

cp old.png new.png
echo 'trailing garbage' >>new.png

你可以使用truncate命令轻松添加空字节以达到特定大小。请记住,生成的文件被广泛接受,但从技术上讲它是无效的,因此可能不会被所有地方接受。(它似乎在每个使用或其衍生产品,并且这个库非常普及,因此该文件很有可能可以正常工作。)

答案2

truncate命令有一个鲜为人知的选项,可以通过添加空字节来增加文件的大小,除非您使用明确显示这些字节的编辑器,否则这些空字节不会在内容中可见,例如vim

解释正确的语法在手册页中,但通常,传递-s选项并给出您想要的文件大小-s 10k,或者添加一个'+'以-s +10k向文件中添加那么多空字节。

添加的字节将插入到末尾。对于您的用例,正常查看时这些空值不会显示在图像中。

答案3

根据您的目的,您可以创建一个稀疏文件。 例如...

dd of=sparse bs=5M seek=1 count=0

这将创建一个文件,其大小看起来为 5 MB,但占用 0 磁盘空间。读取时,“额外空间”将显示为空。

您可以使用 使现有文件稀疏化truncate -s。例如,我让这个动画 GIF 看起来有 5 兆字节大小,但磁盘上只占用 102 千字节。

$ ls -l pikachu-nyan.gif 
-rw-r--r-- 1 schwern staff 100872 Oct 29  2019 pikachu-nyan.gif

$ truncate -s 5M pikachu-nyan.gif 

$ ls -l pikachu-nyan.gif 
-rw-r--r-- 1 schwern staff 5242880 Jan  9 14:32 pikachu-nyan.gif

该文件的 Finder 信息显示...5,242,880 bytes (102 KB on disk)

这是否有效取决于您如何使用该文件。在上面的例子中,动画 GIF 可以在 Firefox 中继续使用。

相关内容