Perl의 아카이브 :: 타르가 메모리가 부족한 이유는 무엇입니까?

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

  •  19-09-2019
  •  | 
  •  

문제

아래 PERL 코드를 사용하여 TAR Archive에 파일을 나열하고 있습니다. TAR 아카이브의 크기는 항상 약 15MB입니다.

my $file = shift;
my $tar = Archive::Tar->new("$file");
my @lists = $tar->list_files;
$tar->error unless @lists;

이 코드를 실행하면 "메모리에서"오류가 발생합니다. Linux 시스템에는 약 512MB가 있으며 시스템의 메모리를 높이고 싶지 않습니다. 더 나은 성능을 위해이 코드를 수정할 수 있는지 또는 TAR 아카이브에 파일을 나열하기 위해 다른 코드를 수정할 수 있는지 제안 할 수 있습니까?

도움이 되었습니까?

해결책

나는 큰 타르에서 그것을 시도했고 오류도 얻었습니다. 아마도 libs의 버그 일 것입니다. 다음은 저를 위해 일했습니다.

@files = split/\n/, `tar tf $file`

다른 팁

에서 Archive::Tar 자주하는 질문:

아카이브 :: 타르가 느리지 않습니까? 네입니다. 그것은 순수한 perl이므로 /bin /tar보다 훨씬 느리지만 매우 휴대가 가능합니다. 속도가 문제 인 경우 대신 /빈 /타르를 사용하는 것을 고려하십시오.

아카이브 :: 타르가 /빈 /타르보다 메모리가 무겁지 않습니까? 예, 이전 답변을 참조하십시오. compress :: zlib이므로 io :: zlib은 파일 핸들을 찾는 것을 지원하지 않으므로 선택의 여지가 거의 없습니다. 아카이브의 메모리 조작을하고 싶다면 괜찮습니다.

추출하려면 Extract_Archive 클래스 메소드를 대신 사용하십시오. 즉시 최적화하고 디스크에 쓸 것입니다.

또 다른 옵션은 ITER 클래스 방법을 사용하여 Tarball의 파일을 한 번에 읽지 않고 파일을 반복하는 것입니다.

 

따라서 위의 경우에는 해결책이되어야합니다.

my $next = Archive::Tar->iter( $file );

while ( my $f = $next->() ) {
    say $f->name;
}

/i3az/

Perl이 필수가 아닌 경우 Tar를 사용하십시오

$ tar tvf file.tar
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top