"./data/x.txt" 파일을 "./data/x.7z" 경로로 압축하고 싶습니다.
달리는 동안
7z a ./data/x.txt.7z ./data/x.txt
"./data/x.txt" 파일을 저장합니다.
data/x.txt
그리고 (내가 원하는 것)뿐만 아니라
x.txt
그러나 7z가 x.7z 파일 내부의 "./data" 디렉터리 경로를 무시하기를 원합니다. 명확히 하기 위해 x.txt를 추가할 때 7z가 7z 파일의 디렉터리 구조를 평면화하기를 원합니다.
가능합니까?
답변1
가능한 해결책 중 하나는 압축하기 전에 일부 디렉토리로 chdir을 수행하는 것입니다. 예를 들어:
$ cd data; 7z a ../test.7z *
$ 7z l ../test.7z
...
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2011-02-18 15:29:53 ....A 6 11 x.txt
------------------- ----- ------------ ------------ ------------------------
...
또 다른 방법은 다른 아카이버(예: rar
. 유용한 명령줄 스위치가 많이 있습니다. 다음 옵션을 사용하여 문제를 해결할 수 있습니다 -ep/-ep1
.
$ rar a -ep test.rar data
또는
$ rar a -ep1 test.rar data
도움말 섹션 rar
:
ep Exclude paths from names
ep1 Exclude base directory from names
답변2
나에게 맞는 대안을 찾았습니다. 나는 이점을 취하고 있다하위 프로세스7z를 누르세요. cwd 속성은 하위 프로세스 명령의 작업 디렉터리를 변경합니다. 아래 코드는 위의 예를 해결합니다. 여기서 "data"는 파일을 추가하려는 경로입니다.
args = [
'7z',
'a',
filename_7z,
filename,
]
output = subprocess.check_output(args, cwd = 'data').decode("utf-8")