【问题标题】:In Perl Script Not able to add a directory to Archive在 Perl 脚本中无法将目录添加到存档
【发布时间】:2020-12-21 19:25:37
【问题描述】:

我必须使用 Perl 脚本将 Windows 目录添加到存档。执行以下脚本后,仅目录名称被存档,并且“C:\Software\Postgres”下的目录内容不包含在存档中。你能帮我在下面的脚本中出错的地方吗?

use warnings;
use strict;
use Archive::Tar;

tar_BKUP();

sub tar_BKUP{
  my $src_D = 'C:\Software\Postgres';
  my $dst_Tar = 'C:\temp\Postgres.tar';
  my $tar = Archive::Tar->new();
  $tar->add_files($src_D);
  $tar->write($dst_Tar);
}

【问题讨论】:

  • stackoverflow.com/questions/515553/… 我想这回答了你的问题
  • 感谢您的回复,我已经尝试了stackoverflow.com/questions/515553/… 中提到的逻辑,但没有奏效。请注意我正在 Windows 上尝试
  • 有趣的是,在 Perl 中,Windows 路径不需要使用反斜杠,您可以使用正斜杠 / 并避免字符串插值中的反斜杠问题。
  • 我在您的代码中添加了一些空格。空格对于使您的代码易于阅读非常有用。请考虑以后自己添加。

标签: windows perl


【解决方案1】:

这里是一个使用File::Find::Rule的例子:

use warnings;
use strict;
use Archive::Tar;
use File::Find::Rule;

tar_BKUP();
sub tar_BKUP{
    my $src_D = 'C:/Software/Postgres';
    my $dst_Tar ='C:/temp/Postgres.tar';
    my $tar = Archive::Tar->new();
    my @files = File::Find::Rule->file->in($src_D);
    $tar->add_files(@files);
    $tar->write($dst_Tar);
}

另见How can I archive a directory in Perl like tar does in UNIX?

【讨论】:

    【解决方案2】:

    add_files() 方法的文档是这样说的:

    $tar->add_files(@filenamelist)

    获取文件名列表并将它们添加到内存存档中。

    因此,您将文件名列表传递给它,这些文件将被添加到存档中。看起来您认为您可以将一个目录传递给它并一次性添加该目录中的所有文件。但它没有记录可以像那样工作。

    如果您知道源目录下没有子目录,那么您可以这样做:

    $tar->add_files( glob( "$src_D/*" ) );
    

    但如果需要包含子目录的内容,那么Håkon's answer using File::Find::Rule 是一个不错的方法。

    如果 Perl 模块没有按照您的预期工作,那么检查文档始终是一个很好的第一步 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2010-11-09
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      相关资源
      最近更新 更多