2011-01-05 88 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