Python 如何修改gzip tar文件中的文件?

Python 如何修改gzip tar文件中的文件?,python,scripting,automation,tar,Python,Scripting,Automation,Tar,我想编写一个(最好是python)脚本来修改gzip tar文件中一个文件的内容。该脚本必须在FreeBSD 6+上运行 基本上,我需要: 打开tar文件 如果tar文件中有“我的文件”: 如果“我的文件”中有一行匹配/RE/: 在匹配行后插入行 将内容重写到tar文件中,保留除文件大小之外的所有元数据 我会在很多文件中重复这一点 Python的tarfile模块似乎无法在压缩tar文件时打开它们进行读/写访问,这是有一定意义的。但是,我也找不到复制tar文件并进行修改的方法 有没有一种

我想编写一个(最好是python)脚本来修改gzip tar文件中一个文件的内容。该脚本必须在FreeBSD 6+上运行

基本上,我需要:

  • 打开tar文件
  • 如果tar文件中有“我的文件”:
    • 如果“我的文件”中有一行匹配/RE/:
    • 在匹配行后插入行
  • 将内容重写到tar文件中,保留除文件大小之外的所有元数据
我会在很多文件中重复这一点

Python的
tarfile
模块似乎无法在压缩tar文件时打开它们进行读/写访问,这是有一定意义的。但是,我也找不到复制tar文件并进行修改的方法


有没有一种简单的方法可以做到这一点?

不要把tar文件看作是一个可以读/写的数据库——事实并非如此。tar文件是文件的串联。要在中间修改文件,需要重写文件的其余部分。(对于特定大小的文件,可以利用块填充)


您要做的是逐个文件处理tarball文件,将文件(经过修改)复制到新的tarball中。Python tarfile模块应该使这一点变得容易。通过将属性从旧的TarInfo对象复制到新的TarInfo对象,您应该能够保留这些属性。

我看不到删除单个文件的简单方法。您可以轻松提取一个或全部文件,然后添加所需的任何文件

我认为唯一的办法是:

  • 使用python tarfile打开tarfile,重命名它
  • 为原始文件名创建重复的空tar
  • 重新添加所有文件,在重新添加之前更改所需的文件
  • 在重新创建时阅读时,请确保重置正确的格式

    tarfile.USTAR_格式 POSIX.1-1988(ustar)格式。 tarfile.GNU_格式 GNU tar格式。 tarfile.PAX_格式 POSIX.1-2001(pax)格式。 tarfile.DEFAULT_格式


您是否要求tar文件保持压缩?是的,它必须保持相同的格式。