根据内容将种子文件分类到100GB的文件夹中

时间:2019-04-25 01:19:49

标签: bash knapsack-problem bittorrent

我有一个文件夹,其中包含完整的torrent文件,我希望根据torrent文件的内容大小将其分类为更易于管理的大小。

这是我发现具有每个torrent文件引用内容大小的列表的最简单方法:

for file in *.torrent; do 
head -1 "$file" | grep -aoE '6:lengthi[0-9]+' | cut -di -f2 | awk '{s+=$1} END {print s}'; 
done

我无法找到一种巧妙的方法将这些文件移动到文件夹中,以使它们不超过100GB。

我希望它最终像这样:

directory 1
---> torrent 1 - 50GB
---> torrent 2 - 25GB
---> torrent 3 - 24GB

directory 2
---> torrent 1 - 10GB
---> torrent 2 - 85GB

directory 3
---> torrent 1 - 90GB

我认为这是一个“多背包问题”,尽管我只是在寻找一个近似值。学习如何使用最佳解决方案将很有趣-一种更简单的方法是填充目录,直到下一个文件溢出,然后继续到下一个存储桶,即使这留下了空白空间。

1 个答案:

答案 0 :(得分:-1)

您要么需要一个从torrent中提取实际文件大小的CLI工具,要么需要一个用于处理解码和可能进行更高级抽象的库,例如获取文件列表,然后在上面进行分割。

使用grep和awk太脆弱了,因为torrent可能包含与您的模式匹配的文本字符串。