如何修改gzip压缩文件中的文件?

时间:2011-01-05 23:15:31

标签: python scripting automation tar

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

基本上,我需要:

  • 打开tar文件
  • 如果tar文件中包含_MY_FILE_:
    • 如果_MY_FILE_中有一行匹配/ RE /:
    • 在匹配行之后插入LINE
  • 将内容重写为tar文件,保留除文件大小以外的所有元数据

我会为很多文件重复这个。

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

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:5)

不要将tar文件视为可以读/写的数据库 - 事实并非如此。 tar文件是文件的串联。要修改中间的文件,您需要重写文件的其余部分。 (对于特定大小的文件,您可能可以利用块填充)

您要做的是按文件处理tarball文件,将文件(带有修改)复制到新的tarball中。 Python tarfile模块应该可以轻松完成。您应该能够通过将属性从旧的TarInfo对象复制到新的对象来保留属性。

答案 1 :(得分:1)

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

我认为唯一的方法是:

  • 使用python tarfile打开tarfile,重命名。
  • 为原始文件名
  • 创建一个重复的空tar
  • 重新添加所有文件,在重新添加之前更改所需文件
  • 在重新创建

    时阅读时,请务必重置正确的格式

    tarfile.USTAR_FORMAT POSIX.1-1988(ustar)格式。 tarfile.GNU_FORMAT GNU tar格式。 tarfile.PAX_FORMAT POSIX.1-2001(pax)格式。 tarfile.DEFAULT_FORMAT

http://docs.python.org/library/tarfile.html