如何创建拆分成多个文件或跨越多个文件的 tar 档案?

如何创建拆分成多个文件或跨越多个文件的 tar 档案?

根据这一页,可以让 tar 创建一个 tar 存档,并将其“分割”为 100 Mb 的文件:

tar -c -M --tape-length=102400 --file=disk1.tar largefile.tgz

问题是,在第一个文件填满后,这个命令会要求您以交互方式为下一个文件提供一个新文件名。

有人知道如何跳过这个交互步骤,并让 tar 自动进行“拆分”吗?

答案1

看一下该--new-volume-script选项,它允许您用不同的机制或生成的文件名替换提示机制。((tar.info)Multi-Volume Archivestar信息页面中。)问题在于split您需要将cat各个部分重新组合在一起才能执行任何操作,而多卷档案应该更灵活一些。

答案2

您可以使用 split 来实现这一点:

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

这告诉 tar 将数据发送到 stdout,并使用 split 从 stdin 中选择数据 - 另外使用数字后缀(-d)、100M 的块大小(-b)并使用“tardisk”作为结果文件名的基础(tardisk00、tardisk01、tardisk02 等)。

随后可以使用以下命令提取数据:

cat tardisk* | tar xzpvf -

答案3

当然,最好的选择是使用--new-volume-script选项。

但是,如果您知道文件的大小(在本例中为 largefile.tgz),那么您也可以这样做:

tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz

概括:

-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)

(对于 -L,根据需要指定任意数量,以便 tar 文件的总和大于 largefile.tgz)

如果您尝试tar目录树结构

答案4

我在这里回答了更好的解释tar 拆分存档

TLDR;

此命令创建 2GB 大小的块,但不进行压缩:

tar -cv --tape-length=2097000 --file=my_archive-{0..50}.tar file1 file2 dir3

相关内容