创建一个tar归档文件,分成最大大小的块


83

我需要备份一个很大的目录,但是我受到单个文件大小的限制。我实际上想创建一个tar.(gz|bz2)存档,该存档最多可拆分为200MB。Clonezilla通过拆分名称如下的映像备份来执行类似的操作:

sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac

有一种方法可以在一个命令中执行此操作吗?我知道如何使用该split命令,但是我不想创建一个大型存档,然后将其拆分为较小的存档,因为这会使我最初创建存档所需的磁盘空间增加一倍。


一个相关的问题:superuser.com/q/290986/11574
sampablokuper

Answers:


108

您可以将tar传递给split命令:

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.

在某些* nix系统(例如OS X)上,可能会出现以下错误:

split: illegal option -- -

在这种情况下,请尝试以下操作(请注意-b 200m):

tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.

如果碰巧试图将文件拆分为适合FAT32格式的驱动器,请使用4294967295的字节数限制。例如:

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.

3
大!然后如何提取存档?
Naftuli Kay 2013年

24
cat sda1.backup.tar.gz.* | tar xzvf -做这份工作吗?
Naftuli Kay 2013年

3
是的,应该。split默认情况下,设置文件的名称,以便在按LOCALE排序时(由外壳遍历完成)将以正确的顺序进行。
jordanm

4
没有冗长,只需tar czf ...不使用v和合并cat backup.tar.gz.* | tar tar xzf - 即可v。我认为此处的详细输出没有任何好处v
莱奥波德·赫兹(LéoLéopoldHertz)2016年

1
只是通过将Xcode打包到FAT32格式的闪存驱动器上来帮助了一个朋友,该驱动器具有:(tar cvzf - Xcode.app/ | split -b 2000m - /Volumes/PH/xcode/xcode.tgzcd /Applications/)使用:非常感谢:)
ecth


4

只需添加一下:由于vfat / fat32中允许的最大文件大小为2 ^ 32减1(4294967295字节),因此在此类文件系统上具有最大允许文件大小的split命令为:

split -b4294967295 -d my_input_file my_output_file_splitted

3
serega@serega-sv:~$ tar -c  -M --tape-length=1024 --file /tmp/pseudo-tape.tar --new-volume-script=/tmp/new-volume.sh --volno-file=/tmp/volno /tmp/stuff-to-archive 
tar: Removing leading `/' from member names
moving /tmp/pseudo-tape.tar to /tmp/archive.1
moving /tmp/pseudo-tape.tar to /tmp/archive.2
moving /tmp/pseudo-tape.tar to /tmp/archive.3

您将需要一个脚本来自动将pseudo-tape.tar文件移动到新名称:

serega@serega-sv:~$ cat /tmp/new-volume.sh 
dir="/tmp"
base_name="pseudo-tape.tar"
next_volume_name=`echo -n "archive."; cat $dir/volno`
echo "moving $dir/$base_name to $dir/$next_volume_name"
mv "$dir/$base_name" "$dir/$next_volume_name"

我没有拒绝您的回答,因为我很高兴看到使用的答案-M --tape-length。但是,此答案不会忽略OP对使用gzip或bzip2压缩的解决方案的要求。
sampablokuper

警告:您不是在谈论tar而是gtar(tar)克隆(GNU tar)。该tar克隆支持创建多卷归档,但是由于错误地认为后续卷不是正确的延续部分,因此有明显的可能性无法/不愿意从这些多卷归档中提取。
schily's
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.