файлы perl unrar - PullRequest
       22

файлы perl unrar

1 голос
/ 11 октября 2011

Я бы хотел, чтобы perl распаковывал файлы из указанной мной папки и после удаления редких файлов, чтобы они не занимали место на жестком диске. Файлы могут быть в следующем формате: (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 Ответ

2 голосов
/ 11 октября 2011

Я не уверен, что ваш вопрос.

Однако, если ваша цель - на самом деле изучить Perl (в отличие от быстрого взлома, чтобы выполнить определенную функцию, для которой ваш код подходит, когда вы добавляете логику для создания нескольких файлов - простите Я не буду писать для вас с нуля, если вы не покажете, что вы уже пробовали), есть несколько способов улучшить ваш код:

  • Во-первых, если все, то это "Perl" (язык) и perl интерпретатор. Абсолютно не имеет отношения к вашему коду, но cronologicaly первый комментарий:)

  • Также, насколько я знаю, файлы .sfv обычно НЕ являются rar файлами. Они содержат контрольные суммы , а не сжатые данные.

  • Весь ваш код должен начинаться с:

    use strict;
    use warnings;
    

    Это позволяет Perl сообщать вам о небезопасных / опасных / плохих вещах, которые вы, возможно, пишете.

  • Вы ОБЯЗАТЕЛЬНО должны использовать `` (системный вызов), когда нет эквивалентной внутренней команды Perl. В этом случае:

    • find - используйте модуль Perl File::Find

    • rar команда - хотя может существовать модуль родного rar Perl (поиск CPAN, чтобы узнать), это одна из редких ситуаций, когда вызов внешней команды может быть в порядке.

      Однако вы ВСЕГДА должны указывать полный путь к системной команде (соображения безопасности)

  • unlink() - как и любой другой вызов ввода-вывода / файловой системы - должна сопровождаться проверкой ошибок:

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