我有一个包含许多文件的目录。这些文件总共占用了几千兆字节的空间。我想压缩这个目录。
但是将目录压缩为单个文件将使该文件难以移动,因此我想要多个文件。
我可以使用:
tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.
为此,但我担心我将需要所有备份文件才能恢复任何数据。我更希望每个文件都是它自己的、独立的单元,包含部分源数据。
我能想到的一种方法是构建一个脚本,该脚本计算每个输入文件的大小并贪婪地将文件附加到列表中,直到达到最大大小。然后对文件列表进行 tar 压缩并开始一个新列表。重复此操作,直到所有文件都在 tar 中。然后可以独立提取焦油。
这不是其他问题的重复,因为我特别想知道如何以这样的方式执行此操作,使整个存档的每个部分本身都是有效的存档,并且可以重建每个文件而不需要联合存档。
有没有一个实用程序可以做这样的事情?
答案1
tar
可以应对分割后的部分档案。当您尝试恢复此类存档的一部分时,它将跳过开始时无法使用的任何内容,并在最后告诉您任何部分文件;其间的一切都将得到正确恢复。您可以tar
使用磁带长度选项指示自身在创建档案时分割档案;看创建一个 tar 存档,分为最大大小的块了解详情。
有一些实用程序比这更好,并且可以生成独立的存档部分(只要大小限制足以存储存档中的最大文件);不幸的是,我所知道的不能满足您的所有要求。大多数平台上都有zipsplit
它可以分割 zip 文件,但它只能处理最大 2GB 的存档。在计划 9 中,有tarsplit
它会分割 tarball,但我不确定它是否可以轻松移植到您正在使用的任何系统(我怀疑您没有使用 Plan 9...)。