Используйте следующие модули в своем Perl-скрипте вместо того, чтобы использовать system
call:
- Используйте File :: Find , чтобы найти файлы, которые вы хотите сделать резервную копию.
- Используйте Archive :: Tar для создания своего архива.
Это устраняет возможные проблемы несовместимости системы, и вы получите больший контроль над тем, что вы 'Резервное копирование и где.Да, с вашей стороны потребуется немного больше смазки для локтя.Вам придется изучить эти два модуля, если вы не знакомы с ними, но оба эти модуля были включены в Perl начиная с Perl 5.10.И, если вы используете более старую версию Perl, вы можете установить их из CPAN.
В конце вы, вероятно, найдете это быстрее и более гибким.Кроме того, это правильный способ решения проблемы (т. Е. Использование модулей Perl вместо оболочки для команд операционной системы.
И, поскольку теперь вы пишете все на чистом Perl,у вас нет проблемы с тем, как ваша команда system
взаимодействует с командной строкой или какая версия tar
установлена на компьютере.
File :: Find довольно прост ( NOTE : код не проверен):
use File::Find;
my @dirList = qw(list of directories to go through);
my @file_list;
find ({
push @file_list, $File::Find::name if -f; #Backup files only
}, @dirList);
Это должно поместить ваши файлы в @file_list
. Подпрограмма в find
может использоваться для фильтрации всего, что вам не нужно. И вы можетеиспользуйте ссылку на подпрограмму тоже. Следующее - то же, что и выше.
find (\&wanted, @dir_list);
sub wanted {
if (-f) { #Use the `if` to see whether you want to backup a file.
push @file_list, $File::Find::name;
}
}
Я немного более шаткий на Archive::Tar
, но, если я помню, это несколько этапов:
- Используйте
my $object = Archive::Tar->new
для создания объекта . - Используйте
$object->create_archive
для создания нового архива. - Используйте
$object->add_files
для добавленияфайлы, которые вы хотите в своем архиве. - Когда вы закончите, используйте
$object->write
, чтобы записать архив на диск и закрыть $object
Попробуйте, это не так уж сложно, и вы улучшите свои навыки программирования на Perl.