إعادة توجيه إخراج UNZIP إلى دليل معين باستخدام Perl

StackOverflow https://stackoverflow.com/questions/1917009

  •  20-09-2019
  •  | 
  •  

سؤال

أريد إلغاء ضغط ملف مضغوط يقول، 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 على النجاح. "

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top