分割 tar.bz2 文件并分别提取每个文件

3

我可以在Ubuntu中将大的tar.bz2文件分割成几个小文件,并单独提取这些小的tar.bz2文件吗?

谢谢!


你想创建一组自包含的.tar.bz2文件,每个文件都可以单独从其他文件中提取?这比仅对整个存档进行拆分要复杂得多,更像是超级用户类型的问题,而不是stackoverflow类型的问题。 - Anya Shenanigans
4个回答

4
我认为这不太容易实现。一个.tar.bz2文件是单个流,没有像zip那样的索引,可以跳到存档中特定文件的开头。您可以使用split工具拆分文件,然后cat这些部分并提取它们(您可以通过stdin执行此操作,以避免在磁盘上重新创建粘贴的文件)。第一个片段将可以单独提取(除了其中最后一个文件可能会损坏),但进一步的片段将无法在没有之前的片段的情况下使用。

3

不确定是否还需要帮助,但我找到了一种方法,可以至少让您使用split命令以及tar(bz2)压缩。就每个文件单独提取而言,此选项将将文件视为整体的一部分(就像Winzip在跨多个卷时所做的那样...如果缺少一个卷,则归档文件作为整体将损坏)。

创建拆分文件。请注意,这将按顺序创建带有“aa,ab,ac”指定的文件:

tar -cv(z/j)f-(要存档的文件)| split-b(以字节为单位的大小,例如4000m)-(输出归档文件的名称)

提取拆分文件:

cat(file*)| bzcat/gunzip(-d) | tar(t/x)v(j/z)f-

(如果使用了“j”选项,则bzcat将进入管道中),或者(如果使用了“z”选项,则gunzip将进入管道中)。如果出现错误,则还可能需要在这两个管道内使用“gunzip -d”。


我不得不运行cat file.tar.bz2* | bzcat > myfile.tar命令来先获取tar文件,因为直接将数据流传输到tar命令并不能正常工作(在Ubuntu 16.04上)。 - scorpiodawg

3
您可以尝试使用 --multi-volume 选项:
tar -cf archive.tar --multi-volume --tape-length 1024 folder

很遗憾,它不能与压缩存档一起使用:

tar: Cannot use multi-volume compressed archives

您可以单独压缩卷,但卷的大小可能会有很大差异。希望这解决了您的使用情况。

0

将文件分割成多个文件。

如果您的tar文件大小超过1.1GB,它将自动创建大小为1.1GB的文件。您可以增加数量(例如1000 {2..1000}),或者增加输入到tape-length参数的值。

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma

但正如@michal所说,无法单独提取它们。

tar: backup.tar.lzma: Cannot extract -- file is continued from another volume
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接