2017-11-22 1 views
0

d:\work 디렉토리에있는 .tgz 파일 (디렉토리 트리/파일 포함)을 추출하고 다시 변경 한 다음 다시 포장해야합니다. . D:\work\123a\... (.tgz 일 때문에 파일 \ 폴더 123a 많은 하위 폴더가 들어 같은 추출 된 폴더 지금 내가 Archive::Tar를 사용하여 반복적으로 팩을 시도 할 것이다, 그러나 문제는 "작업"폴더는 압축입니다 -. 그래서 것 이 "작업"폴더 (CWD 또는 루트 디렉토리)를 제외하는 방법 \work\123a\... 될 를 어떤 도움에 감사드립니다 내 코드 :...Perl Archive :: Tar 루트 디렉토리를 제외하는 방법

my $tar = Archive::Tar->new;   
    $tar->read("$tgzfiles[0]"); 
    $tar->extract(); 
    (my $tgzfolder = $tgzfiles[0]) =~ s/\.[^.]+$//;  

     # Here I make some changes in content{.....} 

    our $arc = Archive::Tar->new(); 
    find(\&archiveit, "d:/work/$tgzfolder"); 
    $arc->write("$tgzfiles[0]", 9); 


    sub archiveit { 
      $arc->add_files($File::Find::name); 

    } 
+0

이 포함 찾으 안녕, 이미이 – Borodin

답변

1

나를 위해 다음 작품을 초기 test.tgz는 홈 폴더에 있습니다 .

작업 디렉토리로 전환하는 데 chdir을 사용했지만 보조 디렉토리로 디렉토리를 변경하지 못하도록 wanted 기능에 no_chdir 옵션을 제공해야했습니다.

또한 $ tgzfolder는 추출 된 파일의 경로 여야하므로 이름이 아닌 아카이브 내용에서 압축을 풀어야합니다.

#!/usr/bin/perl 
use warnings; 
use strict; 

use Archive::Tar; 
use File::Find; 

my @tgzfiles = "$ENV{HOME}/test.tgz"; 

chdir 'd:/work'; 

my $tar = 'Archive::Tar'->new; 
$tar->read($tgzfiles[0]); 
$tar->extract; 

# Modify the contents. 

my $tgzfolder = ($tar->list_files)[0]; 

my $arc = 'Archive::Tar'->new; 
find({wanted => sub { $arc->add_files($File::Find::name) }, 
     no_chdir => 1}, 
    $tgzfolder); 
$arc->write($tgzfiles[0], 9); 
+0

읽을 수 있도록 적절하게 코드를 배치하지만, 여전히, 어쩌면이 때문에 같은 해주십시오 작업 디렉토리도 : $ 아크> add_files ($ 파일 : : 찾기 :: 이름); – Shivaram

+0

@tgzfiles의 내용은 무엇입니까? – choroba

+1

업데이트를 확인하십시오. 나는 많은 것을 추측해야했다, 다음 번에 모든 세부 사항을 제공하려고 노력한다. – choroba

관련 문제