Rediriger sortie dézipper dans le répertoire particulier en utilisant Perl
Question
Je veux dire décompressez fichier compressé, files.zip
, dans un répertoire différent de mon répertoire de travail.
Dites, mon répertoire de travail est /home/user/address
et je veux décompresser les fichiers dans /home/user/name
.
Je suis en train de le faire comme suit
#!/usr/bin/perl
use strict;
use warnings;
my $files= "/home/user/name/files.zip"; #location of zip file
my $wd = "/home/user/address" #working directory
my $newdir= "/home/user/name"; #directory where files need to be extracted
my $dir = `cd $newdir`;
my @result = `unzip $files`;
Mais quand exécuter le dessus de mon répertoire de travail, tous les fichiers sont décompressés dans le répertoire de travail. Comment puis-je rediriger les fichiers non compressés $newdir
?
La solution
unzip $files -d $newdir
Autres conseils
Utilisez la commande Perl
chdir $newdir;
et non pas les guillemets obliques
`cd $newdir`
qui vient lancer un nouveau shell, changer le répertoire dans cette coquille, puis la sortie.
Bien que cet exemple, l'option -d est probablement à dézipper la façon la plus simple de faire ce que vous voulez (comme mentionné par ennuikiller), pour d'autres types de changement-annuaire, j'aime le module File :: chdir, ce qui permet vous localiser les changements de répertoire, lorsqu'il est combiné avec l'opérateur perl « local »:
#!/usr/bin/perl
use strict;
use warnings;
use File::chdir;
my $files= "/home/user/name/files.zip"; #location of zip file
my $wd = "/home/user/address" #working directory
my $newdir= "/home/user/name"; #directory where files need to be extracted
# doesn't work, since cd is inside a subshell: my $dir = `cd $newdir`;
{
local $CWD = $newdir;
# Within this block, the current working directory is $newdir
my @result = `unzip $files`;
}
# here the current working directory is back to what it was before
Vous pouvez également utiliser l'Archive :: module Zip. Regardez spécifiquement au extractToFileNamed:
"extractToFileNamed (fileName $)
me extraire dans un fichier avec le nom donné. Le fichier sera créé avec les modes par défaut. Les répertoires seront créés au besoin. L'argument $ fileName doit être un nom de fichier valide sur votre système de fichiers. Retours AZ_OK sur la réussite. «