2017-03-27 5 views
0

나는 수백만 개의 파일이 들어있는 대형 tar 파일을 가지고 있습니다. 효율적인 이유로 디스크에 파일을 압축 해제하고 싶지 않습니다.tar 파일에서 파일 바이트 오프셋 및 길이를 가져 오는 방법

대신 원하는 파일 이름이 주어지면 스크립트를 작성하고 싶습니다. 파이썬은 tar 파일에서 관련 데이터 덩어리를 가져온다.

tar 파일의 모든 파일의 시작 바이트와 길이를 알려주는 인덱스를 만드는 쉬운 방법이 있습니다. 위에서 언급 한 파이썬 스크립트에서 사용할 인덱스로 디스크에 덤프 할 수 있습니까?

아마도 tar 명령이이 작업을 수행 할 수 있지만 맨 페이지에는 아무 것도 보이지 않습니다.

타르가 압축되지 않았습니다.

미리 감사드립니다. 유사한 유스 케이스와 다른 사람의 이익을 위해

답변

0

파이썬 (나는 http://fomori.org/blog/?p=391있는 것이다 본질에 편리한 유틸리티 적응 결국 (즉 tar 파일에 랜덤 액세스를 가능하게하는 인덱스를 구축하고자하는)) % 1000

fp=open('index.txt','wt') 
ctr=0 
with tarfile.open(tarfname, 'r|') as db: 
    for tarinfo in db: 
    currentseek = tarinfo.offset_data 
    rec = "%d\t%d\t%d\t%s\n" % (ctr,tarinfo.offset_data, tarinfo.size, tarinfo.name) 
     fp.write(rec) 
     ctr += 1 
    if ctr % 1000 == 0: 
     db.members = [] 
fp.close() 

체크는 RAM을 절약합니다. 나는 이것이 깔끔할 수 있다고 확신한다.

-1
tar -O -xf <tar-file> <file-you-want-to-extract> | <your-python-program> 
+0

감사하지만 파일을 디스크로 추출합니다. OP를보십시오 - 나는 이것을하고 싶지 않습니다. 나는 모든 시작 바이트와 tar 내의 파일 길이에 대한 색인을 만들고 싶다. 그런 다음 관련 위치를 찾고 데이터를 꺼내기위한 스크립트를 작성할 것이다. – jcollomosse

+0

디스크를 피하기 위해 linux 명령을 수정했습니다. IMHO, tar을 다시 쓰지 마십시오. – Mark