2017-11-08 1 views
1

텍스트 파일에 저장된 파일 목록에서 tar 파일을 만들려고합니다. 타르를 만들 코드가 있지만 특정 파일을 저장하려고합니다. 디렉토리 (app 및 모든 하위 디렉토리)를 제거하고 상위 디렉토리를 제거하십시오. 이는 특정 디렉토리에서 파일을 여는 소프트웨어 때문입니다.Python tar.add files하지만 부모 디렉토리는 생략합니다.

package.list 파일은 다음과 같습니다 : 나는 restore.add의 경로를 생략하면

app\myFile app\myDir\myFile app\myDir\myFile2

, 그것 때문에 다른 곳에서 실행 내 프로그램에 파일을 찾을 수 없습니다. 특정 디렉토리에서 시작하거나 파일을 추가하지만 텍스트 파일에서 가져온 디렉토리 구조를 유지하는 방법은 무엇입니까? 예 : app 부모 디렉토리가 아닌 모든 파일

내 목표는이 작업을 수행하는 것입니다. tar cf restore.tar -T package.list하지만 Windows의 경우 Python을 사용합니다.

여기에서 basename을 시도했습니다 : How to compress a tar file in a tar.gz without directory?,이 모든 디렉토리를 제거합니다.

나는 또한 그러나이 디렉토리 구조를 파괴하여 몇 가지 이상한 결과를 제공하고 파이썬 2.7

답변

1

당신이 할 수있는 사용 app

path = foo + '\\' + bar 
file = open(path + '\\package.list', 'r') 
restore = tarfile.open(path + '\\restore.tar', 'w') 
for line in file: 
    restore.add(path + '\\' + line.strip()) 
restore.close() 
file.close() 

에 파일의 부하 이름을 변경의 .add 방법에 arcname='app'를 사용하여 시도 TarFile.add에 두 번째 인수를 사용하면 아카이브 내에 이름이 지정됩니다.

그래서 모든 경로를 가정하면이 같은 정신이 뭔가 일 것입니다 :

import tarfile 
prefix = "some_dir/" 
archive_path = "inside_dir/file.txt" 
with tarfile.open("test.tar", "w") as tar: 
    tar.add(prefix+archive_path, archive_path) 

사용법 :

> cat some_dir/inside_dir/file.txt 
test 
> python2 test_tar.py 
> tar --list -f ./test.tar 
inside_dir/file.txt 

생산, 나는 확실히 모든를 만들기 위해 처리 경로에 적합한 모듈을 사용하는 것이 좋을 걸 슬래시와 백 슬래시가 올바른 위치에 있습니다.

+0

감사합니다. 일단 다른 코드를 약간 수정하면 잘 작동합니다. 게시하기 전에 TarFile.add 메서드를 살펴 보았지만 두 번째 인수를 추가 할 수 있다는 것을 알지 못했습니다! – Teracan

관련 문제