根据这一页,可以让 tar 创建一个 tar 存档,并将其“分割”为 100 Mb 的文件:
tar -c -M --tape-length=102400 --file=disk1.tar largefile.tgz
问题是,在第一个文件填满后,这个命令会要求您以交互方式为下一个文件提供一个新文件名。
有人知道如何跳过这个交互步骤,并让 tar 自动进行“拆分”吗?
答案1
看一下该--new-volume-script
选项,它允许您用不同的机制或生成的文件名替换提示机制。((tar.info)Multi-Volume Archives
在tar
信息页面中。)问题在于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