1

我希望 perl 从我指定的文件夹中解压缩文件,然后删除稀有文件,这样它们就不会使用 HDD 空间。文件可以采用以下格式: (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,所有这些部分实际上是 1 个大 rar 文件分成许多部分

4

1 回答 1

2

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

但是,如果您的目标是实际学习 Perl(而不是做一个快速'n'dirty hack 来执行特定功能,一旦您添加一些逻辑来执行多个文件的 rar,您的代码就足够了 - 对不起,我赢了除非你展示你已经尝试过的东西,否则不要费心从头开始为你写一个),有几种方法可以改进你的代码:

  • 首先,它是“Perl”(语言)和perl解释器。与您的代码完全无关,但按顺序排列第一条评论:)

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

  • 您的所有代码都应以:

    use strict;
    use warnings;
    

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

  • 当没有等效的内部 Perl 命令时,您通常应该只使用 ``(系统调用)。在这种情况下:

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

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

      但是,您应该始终指定系统命令的完整路径(安全考虑)

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

     unlink($file) or die "Could not delete file $file: $!\n";
    
于 2011-10-11T02:41:55.833 回答