Archive::Tar 模块备份文件和文件夹,但不备份文件夹中的文件
Archive::Tar module backs up files and folders, but not files in folders
基本问题。
我想使用 Perl 的 Archive::Tar 模块来备份东西。我打算使用 Archive::Tar
来备份文件和文件夹以及文件夹中的文件。使用我当前的代码,前两个有效,但第三个无效。
重现步骤:
- 创建示例目录。
- 在示例目录中,创建两个目录和一个 .txt 文件。
- 使用 vim,在 .txt 文件中写入任何内容。
- 在示例目录中的其中一个目录中,重复第二步和第三步。
- 在示例目录中,创建一个 perl 脚本。
- 将下面的代码复制到脚本中。
- 运行 脚本。在框中,键入 .txt 文件的名称和两个目录。
- 按下大压缩按钮。
- 在压缩目录中打开新的 .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 )
}
您的重现步骤不明确,更多示例可能会有所帮助,但您的脚本对我来说似乎工作正常。我能够将文件夹和文件以及文件夹中的文件成功添加到存档中。对于文件夹中的每个文件,我必须键入整个相对路径,例如。 '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 )
}
我认为仍然存在一些问题,例如:此脚本在名称中包含空格的 files/folders 上似乎失败,即使在转义或引用时也是如此。
基本问题。
我想使用 Perl 的 Archive::Tar 模块来备份东西。我打算使用 Archive::Tar
来备份文件和文件夹以及文件夹中的文件。使用我当前的代码,前两个有效,但第三个无效。
重现步骤:
- 创建示例目录。
- 在示例目录中,创建两个目录和一个 .txt 文件。
- 使用 vim,在 .txt 文件中写入任何内容。
- 在示例目录中的其中一个目录中,重复第二步和第三步。
- 在示例目录中,创建一个 perl 脚本。
- 将下面的代码复制到脚本中。
- 运行 脚本。在框中,键入 .txt 文件的名称和两个目录。
- 按下大压缩按钮。
- 在压缩目录中打开新的 .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 )
}
您的重现步骤不明确,更多示例可能会有所帮助,但您的脚本对我来说似乎工作正常。我能够将文件夹和文件以及文件夹中的文件成功添加到存档中。对于文件夹中的每个文件,我必须键入整个相对路径,例如。 '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 )
}
我认为仍然存在一些问题,例如:此脚本在名称中包含空格的 files/folders 上似乎失败,即使在转义或引用时也是如此。