Archive :: Модуль Tar создает резервные копии файлов и папок, но не файлов в папках - PullRequest
1 голос
/ 07 июля 2019

Основная проблема.

Я хочу использовать модуль Perl Archive :: Tar для резервного копирования. Я использую Archive::Tar для резервного копирования файлов, папок и файлов в папках. С моим текущим кодом первые два работают, а третий нет.

Шаги для воспроизведения:

  1. Создать образец каталога.
  2. В образце каталога создайте два каталога и файл .txt.
  3. Используя vim, напишите что угодно в файл .txt.
  4. В одном из каталогов в каталоге с примерами повторите шаги два и три.
  5. В каталоге примеров создайте сценарий perl.
  6. Скопируйте приведенный ниже код в скрипт.
  7. Запустите скрипт. В поле введите имена файла .txt и двух каталогов.
  8. Нажмите большую кнопку сжатия.
  9. Откройте новый файл .tbz в сжатом каталоге.

код.

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;
    unless ( $input !~ m/ / ) {
        @input = split ( m/ /, $input );
    } else {
        @input = ( $input );
    }
    Archive::Tar -> create_archive ( "TEST.tbz", COMPRESS_BZIP, @input )    
}

1 Ответ

2 голосов
/ 07 июля 2019

Ваши шаги по воспроизведению не ясны, и другие примеры могут быть полезны, но ваш сценарий, кажется, работает хорошо для меня.Мне удалось добавить в архив и папки, и файлы, и файлы из папок.Для каждого файла в папке мне пришлось ввести полный относительный путь, например.'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 )
}

Я думаю, что все еще остаются проблемы, такие как: Этот сценарий, по-видимому, дает сбой в файлах / папках с пробелами в их именах, даже если они экранированы или указаны в кавычках.

...