>我使用了一个名为"concatfs"的保险丝插件
它可以虚拟合并一些具有特定文件名的文件,例如
xxx-concat-.mkv
, 并且此文件的内容是文本:
1.mkv
2.mkv
3.mkv
系统读取
xxx-concat-.mkv
,它输出一个带有1.mkv 2.mkv ...
的合并文件。 但文件实际上并没有合并,它是一个虚拟输出。
所以,我的问题是:
- 静态文件,1.zip> 300 MB。
- 它有这么多副本(发布给很多人),而这些副本的区别只有 4 个字节
offset: 0xa 0xb 0xc 0xd
。 4 个字节是人们的 ID - 所以我想像
concatfs
一样制作一个名为'1-replace -123.zip'的文件,内容大多像:(全二进制)
1.zip
0xa 4 个替换的 4 字节二进制内容
0x1111 10 个替换的 10 字节二进制内容
- 系统读取
1-replaced-123.zip
,fuse
将输出替换的内容。 - 它可以节省如此多的磁盘空间。
- 我知道 PHP/JSP 可以读取和回显替换,但 php 将使用高 CPU/内存来回显大文件流。
你有什么建议吗?
非常感谢,对不起我的英语。
使用合并保险丝虚拟合并/替换文件 (C++ 11)
https://github.com/fly-studio/merged-fuse
例
1.txt
12345678
2.txt
abcdefghi
制作一个名为1-merged-.txt
的文件,
-merged-
是文件名中的特殊单词
内容为 JSON 格式
[
{
"path": "1.txt"
},
{
"path": "2.txt",
"replaces": [
{
"offset": 2,
"length": 2,
"content": "MjE="
}
]
}
]
cat 1-merged-.txt
时,输出:
12345678ab12efghi
您可以看到文件已合并(虚拟),并且内容已替换:
cd
替换为12