我正在尝试寻找一种实用程序或方法,使我将整个目录压缩成块。我知道很容易指定,例如,创建的存档文件应正好是 X 大小或更小,但存档实用程序通常会让您需要所有存档文件才能打开存档,而这正是我要避免的。我需要能够指定存档文件的最大大小,它会将文件添加到其中,直到下一个文件的空间不足,因此它会启动一个新的存档文件。这样,存档文件在技术上是彼此独立的。
抱歉,我很难用语言准确表达这一点。如果我表达得不够具体,请评论。
答案1
这个概念已经引起了我一段时间的兴趣,尽管我还没有为它编写脚本,因为我有点忙!
软件没有简单的方法可以真正知道压缩后的东西会变成什么样子,无需先通过算法运行文件(请记住,tar 只是一个归档程序,而不是压缩实用程序,但您可以将它与 gzip 一起使用)。另一个(更简单的)选项是继续将文件添加到存档中,然后每次检查大小。我不知道有任何现成的解决方案可以实现这一点,但它可以用几行代码来实现!
基本逻辑如下:
这也取决于您使用的实用程序。有些实用程序没有允许您轻松从存档中删除文件的开关,因此您可能需要添加第二个输入变量以留有余地。第二个变量可以确定目录中文件的最大估计大小,如果存档的大小与首选大小相差超过该大小,它会将其添加到文件中。如果空间不足,存档将关闭并创建一个新的存档。当然,您可以将此算法调整为无穷大,确保检查下一个文件的大小并将其与当前存档大小进行比较。您可能还希望首先使用最大的文件,因此您可以看到,这其中可以包含很多逻辑。
不幸的是,这不是一个完整的解决方案,但我希望这是一个好的起点!
答案2
我能想到的唯一办法就是猜测压缩文件的大小。如果文件都是类似类型(文本、图像等),那么在合并 x 个文件后,你大概就能猜出最终压缩文件的大小。
我认为没有任何东西可以满足您的要求,因为它需要压缩->检查大小->再次压缩类型的行为。
答案3
我假设您正在将一个大目录备份到一堆 CD 上,并且您希望能够通过插入 1 张 CD 来从 CD 中取出文件(而不是需要从多 CD 档案中放入 2 张或更多 CD)。
满足您的要求的最简单方法可能是将每个文件单独压缩为自己的“.zip”小文件,然后将这些压缩文件复制到 CD。(有一种方法可以将原始文件所在的子子子目录存储在“.zip”文件中,因此当您恢复该文件时,它会被放回到正确的位置,即使磁盘上的所有“.zip”文件都在单个目录中的一个长列表中)。
一旦你有了 zip 文件列表,你就可以从列表顶部开始复制,当 CD 满了时,弹出并从列表上的那个位置继续复制下一张 CD。这样在每张 CD 的末尾都会留下一点“浪费的空间”。有些人,如果他们在列表的后面找到一个适合那个空间的小文件,就会返回并将那个小文件放入那个原本浪费的空间中。少数人强迫性地尝试重新安排哪个文件放在哪个磁盘上,以便尽可能地将它们全部塞满。
这种方法——独立压缩每个文件——为了获得一点便利而牺牲了一些磁盘空间。
答案4
据我所知,阿菲奥支持多卷存档,并允许从任意存档文件恢复数据。但文件可以跨越两个卷,因此您可能最终不得不执行类似
cat archive-3.afio archive-4.afio | afio -i -k -