单独存储文本文件的各个部分及其重建:具有多个目标的符号链接?

单独存储文本文件的各个部分及其重建:具有多个目标的符号链接?

我有两个标题不同的文本文件,但内容相同。

$ 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_v1original_file_v2在需要时。

这是一种重复数据删除,但仅限于某些选定的文件。

有没有办法,上任何Linux 文件系统,包括extZFS,来完成这个任务吗?或者是否有任何外部工具可以执行此操作?


就像一个提案一样,解决方案可以是一个由符号链接数组、有序数组组成的文件收藏目标文件,以便该数组实际上让用户访问全部这些文件,按指定的顺序。但我不知道它是否存在。

答案1

  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
    
  2. S3QL将会应用压缩和重复数据删除按块。对于几行,您不太可能会达到重复数据删除启动的程度,但它对于大多数相似的文件可能非常有效。 (尽管它的名字,你不需要S3存储使其能够运行。)

    S3QL 非常有效;我用它来保存长期存档备份。

  3. 也许可以将每个文件分成其独特和公共的部分?

     nl < <(cat header1 common)          # Number the lines from file1
     cp <(cat header2 common) /tmp/f2    # Copy the composite file2
    

相关内容