tar -tvf가 파일을 압축 해제하거나 이름 만 나열합니까?


9

tar.gz32GB 의 파일이 있습니다. 특정 폴더를 추출하려고 시도하여 파일 구조를 보려면 다음 명령으로 내용을 나열했습니다.

tar -tvf file.tar.gz > files.txt

모든 파일을 나열하는 데 영원히 걸리는 것 같습니다. 내 질문은 -t 플래그가 파일을 추출합니까? 디스크에서 추출되지는 않지만 시간이 걸리므로 실제로 일종의 버퍼로 처리하는지 궁금합니다.


1
-z옵션을 잊었습니다 : tar -tvfz. 유사 : 타르 tvfz에 반대 명령 타르 TVF를 사용하면 어떻게됩니까?
smci

3
@ smci : 자동 감지되므로 잊어 버리지 않습니다.
Ry-

답변:


14

tar.gz 파일에는 색인이 없습니다. zip 또는 다른 아카이브 형식과 달리 포함 된 파일 또는 기타 메타 데이터의 목록을 얻는 것이 간단하거나 저렴하지 않습니다. 아카이브에 포함 된 파일을 표시하려면 tar는 실제로 압축을 풀고 파일을 추출해야합니다. -t옵션 의 경우에는 메모리에만 있습니다.

사용 사례에서 일반적인 패턴이 아카이브에 포함 된 파일을 나열하는 것이라면 압축 된 파일에 파일 인덱스를 추가 할 수있는 아카이브 형식 (예 : zip)을 사용하는 것이 좋습니다.

더 복잡한 시나리오 에 대해서는 HDF5 형식을 살펴볼 수도 있습니다.

측정

난 그냥 내 대답을 증명할 수있는 측정을해야했다 그들에 많은 파일과 일부 디렉토리를 생성하고 그들 모두를 포장 tar czf files#.tgz files#하고 zip -r files#.zip files#.

테스트를 위해 디스크 속도 측정을 피하기 위해 매번 포장 풀기 명령을 두 번 실행하고 두 번째 실행 결과를 얻었습니다.

시험 1

100,000 개의 빈 파일이files1 포함 된 디렉토리 .

$ time tar tzf files1.tgz >/dev/null
tar tzf files1.tgz > /dev/null  0,56s user 0,09s system 184% cpu 0,351 total
$ time unzip -l files1.zip >/dev/null
unzip -l files1.zip > /dev/null  0,30s user 0,34s system 99% cpu 0,649 total

지퍼가 더 느립니다.

시험 2

512 바이트 의 임의 데이터가 files2있는 5,000 개의 파일이 포함 된 디렉토리

$ time tar tzf files2.tgz >/dev/null
tar tzf files2.tgz > /dev/null  0,14s user 0,03s system 129% cpu 0,131 total
$ time unzip -l files2.zip >/dev/null
unzip -l files2.zip > /dev/null  0,03s user 0,06s system 98% cpu 0,092 total

아직 설득력이 없지만 이번에는 지퍼가 더 빠릅니다.

시험 3

5kB 의 임의 데이터가 files3있는 5,000 개의 파일을 포함하는 디렉토리

$ time tar tzf files3.tgz >/dev/null
tar tzf files3.tgz > /dev/null  0,42s user 0,03s system 111% cpu 0,402 total
$ time unzip -l files3.zip >/dev/null
unzip -l files3.zip > /dev/null  0,03s user 0,06s system 99% cpu 0,093 total

이 테스트에서 파일이 커질수록 tar가 파일을 나열하는 것이 더 어렵다는 것을 알 수 있습니다.

결론

나에게 zip은 매우 작은 (거의 비어있는) 많은 파일에서만 볼 수있는 약간의 오버 헤드를 가져 오는 것처럼 보이지만 많은 수의 큰 파일의 경우 아카이브에 포함 된 파일을 나열 할 때 경연에서 승리합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.