إعادة توجيه إخراج UNZIP إلى دليل معين باستخدام Perl
سؤال
أريد إلغاء ضغط ملف مضغوط يقول، files.zip
, إلى دليل يختلف عن دليل عملي. قل، دليل عملي هو /home/user/address
وأريد فك ضغط الملفات في /home/user/name
.
أحاول أن أفعل ذلك على النحو التالي
#!/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`;
ولكن عند تشغيل ما سبق من دليل عملي، تحصل جميع الملفات على فك ضغط في دليل العمل. كيف يمكنني إعادة توجيه الملفات غير المضغوطة إلى $newdir
?
المحلول
unzip $files -d $newdir
نصائح أخرى
استخدام القيادة بيرل
chdir $newdir;
وليس خلفية
`cd $newdir`
والتي ستبدأ فقط قذيفة جديدة، وتغيير الدليل في تلك القذيفة، ثم الخروج.
على الرغم من أنه على سبيل المثال، فإن خيار -D إلى Unzip هو ربما أبسط طريقة للقيام بما تريد (كما ذكرنا Ennuikiller)، لأنواع أخرى من تغيير الدليل، وأنا أحب وحدة الملف :: Chdir، مما يتيح لك التوطين يتغير دليل الدليل، عند دمج مع المشغل Perl "المحلي":
#!/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
يمكنك أيضا استخدام الأرشيف :: وحدة ZIP. تبدو خصيصا في استخراج الموقع:
"استخراج الموقع (اسم الملف $)
استخراجني إلى ملف مع الاسم المحدد. سيتم إنشاء الملف مع أوضاع افتراضية. سيتم إنشاء الدلائل حسب الحاجة. يجب أن تكون حجة اسم الملف $ $ اسم ملف صالح في نظام الملفات الخاص بك. إرجاع AZ_OK على النجاح. "