Dans Perl Script Impossible d'ajouter un répertoire à l'archive

Sep 03 2020

Je dois ajouter un répertoire Windows à Archive en utilisant Perl Script. Après avoir exécuté le script ci-dessous, seul le nom du répertoire est archivé et le contenu du répertoire sous "C: \ Software \ Postgres" n'est pas inclus dans l'archive. Pouvez-vous s'il vous plaît m'aider là où je me trompe dans le script ci-dessous.

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);
}

Réponses

2 HåkonHægland Sep 03 2020 at 01:41

Voici un exemple utilisant 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);
}

Voir aussi Comment puis-je archiver un répertoire en Perl comme tar le fait sous UNIX?

2 DaveCross Sep 03 2020 at 20:45

La documentation de la add_files()méthode dit ceci:

$ tar-> add_files (@filenamelist)

Prend une liste de noms de fichiers et les ajoute à l'archive en mémoire.

Vous lui transmettez donc une liste de noms de fichiers et ces fichiers sont ajoutés à l'archive. Il semble que vous pensez pouvoir lui passer un répertoire et ajouter tous les fichiers de ce répertoire en une seule fois. Mais il n'est pas documenté pour fonctionner comme ça.

Si vous savez qu'il n'y a pas de sous-répertoires sous votre répertoire source, vous pouvez faire quelque chose comme ceci:

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

Mais si vous avez besoin d'inclure le contenu des sous-répertoires, alors la réponse de Håkon en utilisant File :: Find :: Rule est une bonne approche.

Si un module Perl ne fonctionne pas comme vous le souhaitez, vérifier la documentation est toujours une bonne première étape :-)