Ваши шаги по воспроизведению не ясны, и другие примеры могут быть полезны, но ваш сценарий, кажется, работает хорошо для меня.Мне удалось добавить в архив и папки, и файлы, и файлы из папок.Для каждого файла в папке мне пришлось ввести полный относительный путь, например.'sample / file1.txt'.
Возможно, вы ищете способ автоматического добавления файлов в папку.Что-то вроде этого могло бы помочь:
use strict; use warnings;
use Archive::Tar;
use Tk;
my $mw = MainWindow -> new;
$mw -> Label ( -text => "Please type the files you wish to backup, separated by spaces." ) -> pack;
my $inputEntry = $mw -> Entry ( -width => 30 );
$inputEntry -> pack;
$mw -> Button ( -text => "Compress!", -command => sub { compress() } ) -> pack;
MainLoop;
sub compress {
my $input = $inputEntry -> get;
my @input;
my @dirfiles;
unless ( $input !~ m/ / ) {
@input = split ( m/ /, $input );
} else {
@input = ( $input );
}
foreach(@input) { if(-d $_) { push(@dirfiles,glob "'${_}/*'"); } }
push(@input,@dirfiles);
Archive::Tar -> create_archive ( "TEST.tbz", COMPRESS_BZIP, @input )
}
Я думаю, что все еще остаются проблемы, такие как: Этот сценарий, по-видимому, дает сбой в файлах / папках с пробелами в их именах, даже если они экранированы или указаны в кавычках.