以编程方式将2TB的各种大小的文件打包到25GB的文件夹中? (我使用python,可以接受任何语言)

问题描述 投票:1回答:1

我有大约4,000个大小完全不同的文件,我正在尝试尽可能合理地进行高效备份。我知道将它们全部压缩到一个巨大的tarball中并均匀地分割是一种解决方案,但是当我使用Bluray光盘时,如果刮擦一个部分,则可能会丢失整个光盘的内容。

我编写了一个python脚本,将所有文件(及其大小)放入一个数组中。我首先获取最大的文件,然后添加下一个最大的文件(如果总大小仍小于25GB),或者向下移动列表,直到可以添加一个文件为止,直到达到大小限制,然后重新开始下一个最大的剩余文件。

这工作得相当好,但是最后它确实很参差不齐,我最终将使用比理论上数学上需要的多15张光盘。

有人知道我有更好的方法吗? (这似乎是Google编码面试问题大声笑)。我并不需要它是完美的,我只是想确保在经历这种巨大的非廉价BD-R堆栈之前,我不会愚蠢地这样做。我已包含代码以供参考。

#!/usr/bin/env python3
import os
import sys

# Max size per disc
pmax = 25000000000

# Walk dir
walkdir = os.path.realpath(sys.argv[1])
flist = []
for root, directories, filenames in os.walk( walkdir ):
    for filename in filenames:
        f = os.path.join(root,filename)
        fsize = os.path.getsize(f)
        flist.append((fsize,f))
flist.sort()
flist.reverse()

running_total = 0
running_list = []
groups = []

while flist :
    for pair in flist :
        if running_total + pair[0] < pmax :
            running_list.append(pair[1])
            running_total = running_total + pair[0]
            flist.remove(pair)
    groups.append(l)
    running_list = []
    running_total = 0
print('This will take {} discs.'.format(len(groups)))
python file sorting backup packing
1个回答
0
投票

我只是蛮力地通过在列表中向下拖动,添加越来越小的文件,直到我用完文件或磁盘已满为止,然后重复。所谓“数学上需要”,我指的是所有文件的大小/ 25GB =理想的光盘数量。我可以将结果数组发布到

© www.soinside.com 2019 - 2024. All rights reserved.