为 tar -T 生成适合给定介质大小的文件集

为 tar -T 生成适合给定介质大小的文件集

任何人都可以建议一个脚本,该脚本将一个或多个目录的名称和媒体大小作为输入,并输出文件列表以供 tar 使用-T(假设没有压缩)?

scdbackup/sdvdbackup有点这样做,但它充满了我不需要的膨胀。所以基本上寻找这样的东西:

./splitTars file1 file2 .... 2.0T

其中file可以是文件或目录,最后一个参数是媒体的大小(例如2TB)。然后,它应该输出每个 tar 存档的文件列表,并对太大而无法放入介质的文件发出警告。

如果不存在这样的情况,一种方法是使用 find 创建文件列表,以增加或减少的大小重新排列它们,然后开始将列表切成碎片。

答案1

我认为你有背包问题对于文件大小。

这基本上意味着,给定一组文件,找到可以放入固定大小的备份介质(我们的背包)中的最佳文件组。然后,您需要使用指示的集合来创建 tar 存档,并使用您拥有的任何硬盘驱动器或闪存驱动器从本地计算机一次传输一个文件。

我根据您的编程技能概述了 python 中的示例解决方案。

  1. 获取 python 脚本中的所有输入参数,并查找各个文件或目录的文件大小。您可以du -sm对每个文件或目录参数调用 a ,这样 python 就不必费力地查找各个目录的大小。

  2. 立即消除超出媒体限制的内容。

  3. 将其余的添加到列表中,并将背包算法应用于整个集合。周围有很多例子,比如迈克的解决方案这里。

  4. 消除一轮中添加到背包中的物品,并带着剩余的列表返回到步骤3。

  5. 重复上述步骤 3-4-3,直到列表中的所有剩余项目都能装入一个背包(即剩余项目的总大小小于介质限制)。

应该是这样!

答案2

find有一个按尺寸过滤的选项:

# find file1 file2 .... -size -2000G

相关内容