参见标题。假设我有以下文件和相关大小列表:
cat list_of_files.txt:
1243 001.txt
124 002.txt
4132 003.txt
3000 004.txt
我希望能够将其拆分成多个具有相同大小(在磁盘上)的块,即对于 N=2,它将是:
for N=2
list_A.txt: 001.txt 002.txt 004.txt
list B.txt: 003.txt
N=3:
list_A.txt: 001.txt 002.txt
list_B.txt: 003.txt
list_C.txt: 004.tx
etc..
计算这些块的最有效方法是什么?
仅供参考:我希望能够并行化 rsync,如果您有更好的方法来实现这一点(单独 rsync 每个文件是行不通的),我将非常感谢您的建议。
答案1
这是一个经典的组合问题,称为“分割问题”。
你可以写一个 C 程序来计算,不用担心算法,网上有很多库。我刚刚发现这,如果您需要经常运行它,您必须编写 C 程序来在目录中搜索并获取文件大小。
如果您只想使用一次或以更混乱的方式使用它,您可以将所有文件名和大小放在文件名 ALL_FILES 中,在 C 数组中获取文件名和大小并使用该库计算分区。
不喜欢 C?还有很多其他选择,只需搜索“分区问题你的最爱语言“