Perl의 아카이브 :: 타르가 메모리가 부족한 이유는 무엇입니까?
-
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