perl unrar文件

时间:2011-10-10 23:19:25

标签: linux perl unrar

我希望perl从我指定的文件夹中删除文件,删除rared文件后不要使用硬盘空间。文件格式可以是:(r(ar | [0-9] [0-9])| sfv)

我安装了unrar,而且我是PERL的新手,所以如果我需要在某个地方添加内容,请具体说明。就像在文件的顶部添加它一样。

我的脚本现在是这样的:

while (1)
{
  foreach (`find ${upload_folder}`)
  {
    chomp;
    if ($_ =~ /\.rar$/i)
      {
        $_=~/^([\W\w]+?)\/([^\/]+)$/;
        `rar x "$_" "$1"`;
        unlink($_);
      }
#...
}
#...
}

由于

//哦是的,有时可以有一个文件夹,里面有rar文件的多个部分,名为.r01,.r02 .. .r50,所有这些部分实际上都是一个大的rar文件,分成很多部分

1 个答案:

答案 0 :(得分:2)

我不确定你的问题是什么。

但是,如果你的目标是实际学习Perl(而不是做一个快速的黑客来做一个特定的功能,一旦你添加一些逻辑来做多个文件的rar,你的代码就足够了 - 抱歉,除非你展示你已经尝试过的东西,否则我不会从头开始为你写一篇文章,有几种方法可以改进你的代码:

  • 首先,如果全部,它是“Perl”(语言)和perl解释器。与您的代码完全无关,但cronologicaly第一条评论:)

  • 此外,据我所知,.sfv文件通常不是rar文件。它们包含checksums,而不是压缩数据。

  • 您的所有代码都应该以:

    开头
    use strict;
    use warnings;
    

    这让Perl告诉你可能正在写的不安全/危险/坏事。

  • 当没有相同的内部Perl命令时,你应该只使用``(系统调用)。在这种情况下:

    • find - 使用Perl原生File::Find模块

    • rar命令 - 虽然可能有Perl本机rar模块(搜索CPAN以查找),但这是少数几种调用外部命令可能正常的情况之一。

      但是,您应该始终指定系统命令的完整路径(安全注意事项)

  • unlink() - 与任何其他IO /文件系统调用一样 - 应该跟着错误检查:

     unlink($file) or die "Could not delete file $file: $!\n";