如何在不压缩或存档的情况下将目录拆分为多个部分?

时间:2015-06-07 20:18:52

标签: linux bash unix

怎么会这样做?如果我有一个16GB的文件夹,我如何将其拆分为不超过4GB的文件夹?我也想在不使用tar或类似工具的情况下这样做,除非使用它们不会创建我必须使用拆分的存档。

编辑:

回答评论......

当我指的是一个16GB的文件夹时,我指的是任何大小为16GB的文件夹,文件数量可以是任何文件。

如果文件大于我想要的文件(在这种情况下为4GB),我将使用拆分来更改那个文件

基本上,在此结束时,我想将一个大文件夹分成较小的文件夹,而不是存档。

这是一个背包问题。

1 个答案:

答案 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()的参数含义。