كيف أقوم بعمل "استدعاء نظام إلى ملفات TAR (جنبًا إلى جنب مع العلامة)" للعمل في بيرل

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

  •  24-09-2019
  •  | 
  •  

سؤال

هذه هي مكالمة النظام ، أنا أقوم الآن في بيرل لتخري الملفات

system("${tarexe} -pcvf $tarname $includepath") which works fine.

$tarexe -> location of my tar.exe file
$tarname -> myMock.tar
$includepath -> ./input/myMockPacketName ./input/myPacket/my2/*.wav ./input/myPacket/my3 ./input/myPacket/in.html 

الآن أريد استبعاد بعض الملفات باستخدام العلامة Exclude ، والتي لا تستبعد الملفات

system("${tarexe} -pcvf $tarname $includepath --exclude $excludepath")

$excludepath -> ./input/myMockPacketName/my3

نفس القمامة

${tarexe} -pcvf $tarname $includepath --exclude $excludepath  

لا يعمل عندما أقوم بتشغيله في سطر الأوامر.

هل كانت مفيدة؟

المحلول

@نجم النجوم -

بالنسبة إلى أسسلك المحدد ، يجب أن يكون exclude "./input/mymockpacketname/my3/*" بدلاً من "./input/mymockpacketname/my3" من ما أتذكره من GNU TAR. أيضا ، من المفترض أن تتابع أسماء الملفات المضمونة -أشياء Exclude ؛ التي يجب نقلها بشكل صحيح

لكن

لماذا تخبرك المتطلبات كيف تفعل الأشياء بدلاً من ما يجب القيام به؟

ما لم تكن الواجب المنزلي (في هذه الحالة ، يرجى أن تكون مقدمًا بشأنه)

... أو تلك هي المتطلبات من فريق الهندسة المعمارية العامة لبعض الشركة (وفي هذه الحالة يجب أن يتم تعليمهم بأدب أن أفضل الممارسات المعيارية للصناعة هي استخدام المكتبات الأصلية لبيرل على مكالمات النظام كلما كان ذلك ممكنًا ما لم يكن هناك سبب واضح للقيام بخلاف ذلك) ...

في كل حالات أخرى ، يجب عليك تحديد طريقة استخدامها للتنفيذ.

نصائح أخرى

ليس لدي أدنى فكرة عن سبب --exclude لا يعمل. لكنني سأقدم لك نصيحة بيرل المفضلة لدي عندما أرى أ system في الاستخدام.

لا

بالطبع في بعض الأحيان تكون ضرورية ولكن تحقق أولاً إذا كانت هناك وحدة CPAN للقيام بالمهمة بدلاً من ذلك. في هذه الحالة أقترح أرشيف :: targzip عادة سأستخدمها أرشيف :: القطران لكنني لم أجد --exclude وظائف (كان لدي نظرة سريعة فقط لذلك قد يكون هناك)

ليست إجابة مباشرة على السؤال ولكن تلميحًا قد يساعدك في تحديد مشاكل مثل هذه في المستقبل:

بدلا من الكتابة

system("${tarexe} -pcvf $tarname $includepath --exclude $excludepath")

افعل شيئًا مثل

my $command = "${tarexe} -pcvf $tarname $includepath --exclude $excludepath"  ;

print "About to run $command\n" ;
system $command ;

يمكنك بعد ذلك قطع ولصق الإخراج في نافذة طرفية جديدة. أو يمكنك اكتشاف أن الأمر الذي تم إنشاؤه هو ما كنت تعتقد أنه كان.

تنصل - أتفق مع معظم الأشخاص الذين لديهم ansewred هذا السؤال بأن استخدام وحدات Perl Tar سيكون أفضل ، ولكن قبول أنه قد تكون هناك أسباب للقيام بذلك بهذه الطريقة

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