我需要备份一个相当大的目录,但是我受到单个文件大小的限制。我实际上想创建一个tar.(gz|bz2)存档,该存档最大分为200MB。 Clonezilla通过将像这样命名的映像备份进行拆分来实现与此类似的操作:我知道如何使用split命令,但我不想创建一个大型存档,然后将其拆分为较小的存档,因为这会使我最初创建存档所需的磁盘空间增加一倍。 br />

评论

相关问题:superuser.com/q/290986/11574

#1 楼

您可以将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.

要提取文件时,请使用以下命令(自@Naftuli Kay注释起):
cat sda1.backup.tar.gz.* | tar xzvf -


评论


将猫sda1.backup.tar.gz。* | tar xzvf-做这份工作吗?

– Naftuli Kay
13年1月18日在19:45

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

–jordanm
13年1月18日在19:47

@NaftuliTzviKay在命令行上使用cat可以正常工作。但是,当我使用她的脚本来做同样的事情时,我被错误提示说找不到file.tar.gz. *。

– Vinay
2014年12月8日17:33

如果没有详细说明,只需执行tar czf ...,而不使用v,然后由cat backup.tar.gz。*合并。 tar tar xzf-不使用v。我看不到v在这里输出详细信息的好处。

–LéoLéopoldHertz준영
16年7月9日在12:15



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

–ecth
17年12月8日12:06



#2 楼

在macOS上,split命令的工作原理略有不同:

$ tar cvzf - foo | split -b 2500m - foo.tgz.


#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


您需要一个脚本来自动将伪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压缩的解决方案的要求。

–user6860
18年3月15日在13:28

警告:您不是在谈论tar,而是在谈论名为gtar(GNU tar)的tar克隆。该tar克隆支持创建多卷存档,但是由于错误地声称后续卷不是正确的延续部分,因此有明显的可能性无法/不愿意从这些多卷存档中提取。

–schily
'18 Sep 1'在11:32



#4 楼

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

split -b4294967295 -d my_input_file my_output_file_splitted