快速将文件列表拆分成相同大小的块(内存)

快速将文件列表拆分成相同大小的块(内存)

参见标题。假设我有以下文件和相关大小列表:

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?还有很多其他选择,只需搜索“分区问题你的最爱语言

相关内容