كيف يمكنني أرشفة دليل في بيرل مثل القطران لا في UNIX؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

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

وشكرا للاستجابة ولكن لماذا أنا أسأل لفعل ذلك هو بيرل أريد أن يكون مستقلا عن المنصات. أريد أن نقل ملف واحد كبير لآلات متعددة. تلك الآلات يمكن أن يكون من أي منصة. وأود أن تكون قادرة على untar هذا الملف القطران الصحيح بشكل صحيح؟ لذلك أريد أن يكتب لي القطران الخاصة وبرامج untar. لماذا أنا باستخدام بيرل هو لجعله منصة مستقلة. لذلك لا يمكن استخدام أمر والقطران عن طريق فتح قذيفة في السيناريو وأشياء من هذا القبيل. و الأرشيف :: قطران تتعامل وحدة فقط مع ملف التار لكنه لا يملك أي خيار لأرشفة الملفات .

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

المحلول

وهنا مثال بسيط:

#!/usr/bin/perl -w

use strict;
use warnings 'all';
use Archive::Tar;

# Create a new tar object:
my $tar = Archive::Tar->new();

# Add some files:
$tar->add_files( </path/to/files/*.html> );
# */ fix syntax highlighing in stackoverflow.com

# Finished:
$tar->write( 'file.tar' );

# Now extract:
my $tar = Archive::Tar->new();
$tar->read( 'file.tar' );
$tar->extract();

نصائح أخرى

وأنت قد ترغب في النظر في الأرشيف: : قطران على كبان. (أنا مجرد تخمين، ولقد استخدمت أبدا بنفسي.) لماذا تصرون على القيام به في بيرل؟

ومعلمتين. اسم الملف القطران مضغوط واسم الدليل الذي تريد في ملف القطران. على سبيل المثال

tarcvf test.tar.gz mydir
#!/usr/bin/perl -w 

use strict;
use warnings 'all';
use Archive::Tar;
use File::Find;


my $archive=$ARGV[0];
my $dir=$ARGV[1];

if ($#ARGV != 1) {
    print "usage: tarcvf test.tar.gz directory\n";
    exit;
}

# Create inventory of files & directories
my @inventory = ();
find (sub { push @inventory, $File::Find::name }, $dir);

# Create a new tar object
my $tar = Archive::Tar->new();

$tar->add_files( @inventory );

# Write compressed tar file
$tar->write( $archive, 9 );

ويمكنك استخدام وحدة الأرشيف :: قطران بيرل، أو يمكنك تنفيذ القطران مباشرة.

إذا قمت بتشغيل مع خيار استخدام القطران من سطر الأوامر، استخدم العلم -p للحفاظ على الأذونات.

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

ويبدو لي مثل رسينك قد يكون أفضل حل لهذا، ولكن هل لم يقل الكثير عن ما القيود الأخرى التي لديها.

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