问题标签 [tarfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3950 浏览

python - 使用 Python 从仅具有基本名称的 tarfile 中提取文件

我有一个“tafile”,其中包含具有完整路径“/home/usr/path/to/file”的文件。当我将文件提取到当前文件夹时,它会递归创建完整路径。有没有办法可以只提取基本名称的文件。

0 投票
2 回答
7271 浏览

python - 使用 Python 的 tarfile 时覆盖现有的只读文件

我正在尝试使用 Python 的 tarfile 模块来提取 tar.gz 存档。

我希望提取覆盖它们已经存在的任何目标文件 - 这是 tarfile 的正常行为。

但是,我打了一个告密者,因为某些文件具有写保护(例如 chmod 550)。

tarfile.extractall()操作实际上失败了:

如果我尝试从普通命令行中删除文件,我可以做到,我只需要回答一个提示:

普通的 GNU tar 实用程序也可以毫不费力地处理这些文件——它只是在您提取时覆盖它们。

我的用户是文件的所有者,因此在运行 tarfile.extractall 之前递归地对目标文件进行 chmod 并不难。或者我可以使用 shutil.rmtree 事先吹走目标,这是我现在正在使用的解决方法。但是,这感觉有点骇人听闻。

是否有更 Pythonic 的方式来处理覆盖 tarfile 中的只读文件、使用异常或类似的方法?

0 投票
2 回答
2123 浏览

python - tarfile和用户、组信息问题

我正在使用 python tarfile 模块从 *.tgz 文件中提取文件。这是我使用的:

假设“some.tar”内容为:

但是提取后我丢失了所有用户、组、日期...信息。它们现在属于调用脚本的任何人(在我的情况下为 root)。他们变得像:

有没有办法保留文件所有者,文件的日期信息?

tarfile 模块页面

-handles directories, regular files, hardlinks, symbolic links, fifos, character devices and block devices and is able to acquire and restore file information like timestamp, access permissions and owner.

从这个陈述中我了解到,通过“tarfile”模块很可能做到这一点,还是我理解错了?

Python 版本是 2.6.1

编辑:我以 root 身份运行此脚本

谢谢

0 投票
1 回答
705 浏览

python - 带有 bz2 数据的 Python TarFile

我试图下载一个 bz2 压缩的 tar 文件并tarfile.TarFile从中创建一个对象。

根据文档(http://docs.python.org/library/tarfile.html#tarfile.open),当您使用fileobj=它时使用它来支持 file name=。不过,看起来它仍在尝试访问空文件?

如果指定了 fileobj,它将用作为 name 打开的文件对象的替代项。它应该在位置 0。

如果我不使用tarfile.open()并且我解压缩 bz2 数据并tarfile.Tarfile手动创建对象,则它与StringIOand一起使用fileobj

我试图精简,因为tarfile应该支持 bz2 压缩。

0 投票
4 回答
2321 浏览

python - 确定目录中是否添加、删除或修改了任何文件

我正在尝试编写一个 Python 脚本,它将获取目录中所有文件的 md5sum(在 Linux 中)。我相信我在下面的代码中已经完成了。

我希望能够运行它以确保目录中没有文件已更改,并且没有添加任何文件以进行删除。

问题是如果我对目录中的文件进行了更改,然后又将其更改回来。我从运行下面的函数得到不同的结果。(即使我将修改后的文件改回来。

谁能解释一下。如果你能想出一个变通办法,请告诉我?

编辑: 正如这些好人已经回答的那样,看起来 tar 包含标题信息,例如修改日期。使用 zip 会以不同的方式或其他格式工作吗?

还有其他解决方法的想法吗?

0 投票
1 回答
2932 浏览

python - Python:在提取过程中重命名 tar 文件中的成员

前提

  • 我有一个目录/foo/bar
  • 我有一个包含目录的 tar 文件baz

问题

baz将存档中的内容提取到/foo/bar

例子

档案包含:

源目录包含:

提取后我希望它是:

到目前为止的解决方案

提取到一个临时目录,然后将其内容移动baz到目标位置,因为我的baz目录将始终具有相同的名称,所以这是可行的。

还有其他想法吗?

0 投票
1 回答
4440 浏览

python - 如何使用 Python 多处理池处理 tarfile?

我正在尝试使用multiprocessing.Pool. 我能够在多处理模块中成功使用 ThreadPool 实现,但希望能够使用进程而不是线程,因为它可能会更快并消除为 Matplotlib 处理多线程环境所做的一些更改。我收到一个错误,我怀疑与不共享地址空间的进程有关,但我不确定如何解决它:

实际的程序更复杂,但这是我正在做的一个重现错误的示例:

我怀疑当TarInfo对象被传递到另一个进程但父进程TarFile没有时出现问题,但我不确定如何在多进程情况下修复它。我可以这样做而不必从 tarball 中提取文件并将它们写入磁盘吗?

0 投票
1 回答
1878 浏览

python - 如何在 Python 中读取损坏的 tar.bz2 文件?

我有一个程序可以在工作时将其输出保存到 tar.bz2 文件中。我有一个处理该数据的 python 脚本。

如果第一个程序被中断,我希望能够使用输出 - 或者只是在进程正在进行时针对它运行 python 脚本。

当然,最终的 bzip2 块是未完成的,因此无法读取 - 它实际上已损坏,尽管实际上它只是被截断了。GNU tar 实际上会很高兴地提取到该文件的所有内容 - 就这一点而言,也将bzcat如此。并且bzip2recover可以创建修复的块,尽管在这种情况下它确实没有bzcat.

但我正在尝试使用 Python 的标准tarfile模块。这失败了

当我尝试在我知道开头TarFile.extractfile的文件上使用时。(将提取它就好了。)tar -xf tarfile.tar.bz2 filename

有什么聪明的方法可以忽略文件的无效结尾并使用我所拥有的吗?

数据集可以变得相当大,并且非常非常可压缩,因此不希望将其保持为未压缩状态。

(我发现现有问题Untar archive in Python with errors,但在这种情况下,用户正在尝试os.systemtar 文件。)

0 投票
1 回答
2429 浏览

python - Python tar 文件大小

我可以通过这种方式计算 tarfile 中文件的大小:

但返回的总大小是 tarfile 中元素的总和,而不是压缩文件的大小(至少这是我通过尝试这样做所相信的)。有没有办法在不通过 os.path.getsize 之类的东西检查的情况下获得整个 tar 文件的压缩大小?

0 投票
4 回答
18792 浏览

python - 使用 Python 安全地提取 zip 或 tar

我正在尝试将用户提交的 zip 和 tar 文件提取到目录中。zipfile 的extractall方法(与 tarfile 的 extractall 类似的文档指出,路径可能是绝对..路径或包含超出目标路径的路径。相反,我可以使用extract自己,如下所示:

这安全吗?在这种情况下,档案中的文件是否有可能结束some_path?如果是这样,我怎样才能确保文件永远不会在目标目录之外结束?