[文件压缩]7z压缩包批量转Zip格式

There's more than one way to do it!
https://metacpan.org http://perlmonks.org
回复
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

[文件压缩]7z压缩包批量转Zip格式

帖子 523066680 »

情况,一个包含 level-2 股票单日数据的7z压缩包,5000多个文件,即使单独访问其中一个,也需要解压整个压缩包,时间占用大。
如果全部解压存盘,则文件过大,一天的数据解压前400M,解压后4G,一个月20个交易日算,80G,一年就需要960G,空间占用大。
zip就没有这个问题,按快速压缩模式,一天的数据压缩后800M,还算可以接受,访问单个文件速度也快,不需要全部解压。

没啥好方法,只能是先解压再打包。
因为压缩包在移动硬盘,体积大、数量多,文件展开过程非常慢,中间解压到本地固态硬盘,然后重新压缩。
以下代码 假设 7z.exe 位于环境变量,可以直接访问。

代码: 全选

use Modern::Perl;
use File::Basename;
STDOUT->autoflush(1);
STDERR->autoflush(1);

for my $e ( glob "*.7z" )
{
    printf "%s\n", $e;
    my $dir = basename($e, ".7z");
    my $zip_file = "${dir}.zip";
    system( qq(7z x "${e}" -aos -oD:/Temp -bsp1 ) );
    system( qq(7z a "${zip_file}" "D:/Temp/${dir}" -mx1 -mmt4 -bsp1 ) );
    if ( -e $zip_file and (-s $zip_file) > 1024*1024*10 )
    {
        printf "remove folder\n";
        system( qq( rd /s /q "D:/Temp/${dir}" ) );
        printf "remove 7z file\n";
        unlink $e;
    }
}

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 13 访客