如何创建tar存档(分为多个文件或跨越多个文件)?


27

根据此页面,可以让tar创建“拆分”为100 Mb文件的tar存档:

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

问题在于,在填充第一个文件后,此命令将要求您交互式地为下一个文件提供新的文件名。

有人知道跳过此交互式步骤的方法,让tar自动执行“拆分”吗?


Answers:


20

看一下该--new-volume-script选项,它使您可以使用其他机制或生成的文件名替换提示机制。((tar.info)Multi-Volume Archivestar信息页面中。)问题split是您需要将cat各个部分放回去做任何事情,而多卷存档应该更灵活一些。


当然是这样。
Eduardo I.

2
谢谢,这就是我想要的!我现在发现实际上这里有一些说明(包括示例):gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Samuel Lampa

这样做的问题是,它涉及过多的废话,与适当的Unix风格的应用程序相反。
Jan Kyu Peblik

33

您可以为此使用split:

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

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

之后可以提取数据:

cat tardisk* | tar xzpvf -

1
小修正,-d用于数字后缀,而不是前缀。
yclian 2014年

8

当然,最好的选择是使用该--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使用目录树结构


1

我可以使用以下命令:

mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
    ./split/part_${TAR_VOLUME}.tar' \
    -f split/part_1.tar large_file.tar.gz

唯一的问题是part_1.tar实际上将是最后一个文件,而其他文件只移位了一个。即part_2.tar实际上是第一部分,part_k.tar也是(n - 1)第三部分。用一些shell脚本解决这个问题很简单,留给读者练习。


1

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

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.