如何在Linux上创建支持替换/删除文件的归档文件?

5
如果有一个包含数千个文件的压缩文件,从shell脚本中删除/替换其中的文件,最优方法是什么? tar不支持在归档中替换文件,“解压并重新压缩”用于替换大型档案中的单个文件似乎不是最佳方法。 看起来,xz也不支持此选项。 7z也不适合此任务(7z的man页面不建议将其用于压缩单个文件,只建议用于压缩tar文件,因为存在保留文件所有者/组信息的问题)。 pax也没有在归档中删除/替换文件的选项。 在Linux上有一种常见的方式可以通过命令行创建这样的档案吗?

2
没有最佳的方法,只有几种平庸到糟糕的方法。 - Ignacio Vazquez-Abrams
2
这个问题比你想象的更普遍,并且存在于每个其他平台上。一旦你将多个文件压缩成一个单独的存档,删除一个文件(或更新它)就是一项昂贵的操作(因为你必须解压缩所有内容,执行更新或删除,然后重新压缩所有内容)。否则,它就不再是一个有效的存档了。 - Elliott Frisch
@AlBerger 不是这样的。一旦这些字节在单个文件中存储在磁盘上,就不会再改变了。 - Elliott Frisch
@Pavel,假设需要定期备份一个包含10000个文件的目录,并且只有少数文件会不时发生变化。那么仅压缩几个更改的文件要比解压并重新压缩全部10000个文件更快。 - Al Berger
@AlBerger 除非整个流通常被压缩以获得更好的压缩比。只有tar不会进行任何压缩,并且它也不支持您的选项。 - Elliott Frisch
显示剩余9条评论
1个回答

2
我认为你应该认真考虑使用ZFS或其他先进的文件系统。这将允许您:
  • 创建增量备份(通过快照)
  • 在备份中修改文件
  • 通过命令行管理所有内容(cronjobs等)
  • 使用压缩
  • 在不同设备间移动备份
  • 如果需要更高的安全性,使用不同的RAID级别
ZFS在Solaris下运行得非常完美,但Linux已经有一个稳定的端口。

谢谢您提供的链接。不过,我特别询问的是关于存档文件的,因为这些存档文件也应该可以从Windows访问(实际上它们存储在NTFS文件系统中)。 - Al Berger
你可以通过NFS(这是文件服务器的常规方式)使ZFS卷可访问,或在Windows机器上安装类似zfs-win的工具。 - Pavel
似乎比解压缩和压缩还多余。更容易的方法可能是从Windows执行备份。 - Al Berger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接