怎么会这样做?如果我有一个16GB的文件夹,我如何将其拆分为不超过4GB的文件夹?我也想在不使用tar或类似工具的情况下这样做,除非使用它们不会创建我必须使用拆分的存档。
回答评论......
当我指的是一个16GB的文件夹时,我指的是任何大小为16GB的文件夹,文件数量可以是任何文件。
如果文件大于我想要的文件(在这种情况下为4GB),我将使用拆分来更改那个文件。
基本上,在此结束时,我想将一个大文件夹分成较小的文件夹,而不是存档。
这是一个背包问题。
答案 0 :(得分:0)
以下Perl脚本是概念验证,您可能需要修改它以执行您想要的操作:
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
use Algorithm::Bucketizer;
my $bucketizer = Algorithm::Bucketizer->new( bucketsize => 4 * 1024 * 1024 * 1024 );
find( { wanted => sub { $bucketizer->add_item( $_, -s ) if (-f) }, no_chdir => 1 }, '.' );
$bucketizer->optimize( algorithm => 'random', maxtime => 10, maxrounds => 100 );
for my $b ( $bucketizer->buckets ) {
print "\nBucket " . $b->serial . " (" . $b->level . "):\n";
print "$_\n" for ( $b->items );
}
它在当前目录中查找文件,并以静默方式忽略大于4 GB的文件。它使用Algorithm::Bucketizer模块。请参阅文档了解optimize()
的参数含义。