플랫 디렉터리 7z 파일에 파일을 추가하는 7z 명령줄

플랫 디렉터리 7z 파일에 파일을 추가하는 7z 명령줄

"./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")

답변3

dr01의 답변은 일반적으로 정확하지만 단일 파일을 압축하기 위해 7z를 사용하는 이유는 무엇입니까?

꼭 살펴보시길 권합니다xz아니면 어쩌면pxz, 귀하의 배포판에서 사용 가능한 경우. xz에서는 잘 작동합니다 tar. 최신 버전의 tar에는 다음을 통해 작동하는 "-J" 스위치가 있습니다.xz

어쨌든 or 를 xz사용하는 것처럼 단일 파일을 압축 할 수 있습니다 .gzipbzip2

$ xz file.txt

(파일 생성 file.txt.xz)

관련 정보