2014-11-25 1 views
0

누군가 나를 기쁘게 해드릴 수 있겠습니까 .....perl을 사용하여 특정 폴더에있는 개별 폴더를 압축하는 방법은 무엇입니까?

내 폴더에는 D : \ Zip 안에 A, B, C라고 쓰여 있습니다. A.zip, B.zip을 우편으로 보내야합니다 & C. 우편 번호. 아래 코드는 제가 시도한 코드입니다. CODE :

enter code here 
#!/usr/bin/perl 
use strict; 
use Cwd; 
use File::Copy; 
use Archive::Zip qw(:ERROR_CODES :CONSTANTS); 
use IO::Compress::Zip qw(zip $ZipError) ; 

use File::Basename 'basename'; 
my $path1=getcwd; 
my $zipfile=getcwd."\.zip"; 
my $zip; 

opendir(DIR, "$path1\/"); 
my $mainFolder=grep(/"$path1\/"/,readdir(DIR)); 
close DIR; 

#### Zip Module ##### 
my $f2; 
my $newzipname=$mainFolder; 
print $mainFolder."\n"; 

foreach my $f($mainFolder) 
{ 
print $f."\n"; 
print $mainFolder."asfsd\n";  
my $zip=Archive::Zip->new(); 
$zip->addTree("$f"); 
die 'write error' unless $zip->writeToFileNamed($path1.'.zip') == AZ_OK; 
exit 0; 
} 

답변

1

이 방법이 유용합니까?

#!/usr/bin/perl 
use strict; 
use Cwd; 
use Archive::Zip qw(:ERROR_CODES :CONSTANTS); 
use File::Spec; 

my $path=getcwd; 

opendir(DIR, $path); 

while (my $entry = readdir DIR) { 
    my $fullpath = File::Spec->catdir($path,$entry); 
    next unless -d $fullpath; 
    next if $entry eq '.' or $entry eq '..'; 
    my $zip=Archive::Zip->new(); 
    $zip->addTree($fullpath); 
    die 'write error' unless $zip->writeToFileNamed($fullpath.'.zip') == AZ_OK; 
} 

close DIR; 
+0

감사합니다. 작동하지만 폴더 중 하나에 대해 삭제해야하는 Thumbs.db 파일을 만들고 있습니다. 이 글을 쓰려고했지만 여전히 삭제되지는 않습니다. CODE : 내 $ 항목을 foreach는 ($ 경로) \t { \t \t (-e "$ 경로 \ /Thumbs.db") \t \t { \t \t \t 링크 해제 ("$ 경로 \ /Thumbs.db")의 경우 또는 "Thumbs.db를 삭제할 수 없습니다"; \t \t} \t} – flora

+0

하면'Thumbs.db' 디렉토리, 당신은'사용 파일 : 경로 QW (remove_tree) 같은 것을해야 할 것입니다; remove_tree (File :: Spec-> catdir ($ path, 'Thumbs.db'));'- unlink는 일반 파일/링크에서만 작동합니다. –

+0

코드가 잘 작동합니다 ... 일부 변경 사항은 현재 요구 사항에 있습니다. 즉 원본 파일의 사본을 작성하고 압축하는 것입니다. 폴더 A 내의 A.zip \ A \ contents와 같은 원본 파일을 직접 압축해야합니다. – flora

관련 문제