我有两个标题不同的文本文件,但内容相同。
$ cat original_file_v1
header 1 beginning
header 1 contents
header 1 end
common contents line 1
common contents line 2
...
$ cat original_file_v2
header 2 beginning
header 2 contents
header 2 end
common contents line 1
common contents line 2
...
我想:
- 将不同文件中的标头和公共内容仅存储在单个文件中一次,以节省空间;
- 能够重新创建
original_file_v1
或original_file_v2
在需要时。
这是一种重复数据删除,但仅限于某些选定的文件。
有没有办法,上任何Linux 文件系统,包括ext
和ZFS
,来完成这个任务吗?或者是否有任何外部工具可以执行此操作?
就像一个提案一样,解决方案可以是一个由符号链接数组、有序数组组成的文件收藏目标文件,以便该数组实际上让用户访问全部这些文件,按指定的顺序。但我不知道它是否存在。
答案1
使用文件归档程序(例如
tar
将应用压缩),您可以重新创建文件在需要的时候,但不透明tar czf bothfiles.tgz original_file_v1 original_file_v2 tar cf - original_file_v1 original_file_v2 | gzip > bothfiles.tgz
要恢复第一个文件,
tar xzf bothfiles.tgz original_file_v1
S3QL将会应用压缩和重复数据删除按块。对于几行,您不太可能会达到重复数据删除启动的程度,但它对于大多数相似的文件可能非常有效。 (尽管它的名字,你不需要S3存储使其能够运行。)
S3QL 非常有效;我用它来保存长期存档备份。
也许可以将每个文件分成其独特和公共的部分?
nl < <(cat header1 common) # Number the lines from file1 cp <(cat header2 common) /tmp/f2 # Copy the composite file2