2011-01-05 93 views
2

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

基本上,我需要:

  • 打开tar文件
  • 如果tar文件具有_MY_FILE_它:
    • 如果_MY_FILE_有一行匹配/ RE /它:
    • 在匹配行后插入LINE
  • 将内容重写到tar文件中,保留除了文件大小

我会对很多文件重复此操作。

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

有没有简单的方法来做到这一点?

+0

你需要的tar文件保持压缩? – 2011-01-05 23:17:12

+0

是的,它必须保持相同的格式。 – 2011-01-05 23:18:01

回答

5

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

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

+0

工作正常!谢谢! – 2011-01-06 04:23:57

1

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

我认为,唯一的办法就是:

  • 打开使用python tar文件的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