현재 디렉토리에 여러 개의 파일이 있는 경우 압축을 풀면 특정 디렉토리에 배치될 수 있도록 압축할 수 있기를 원합니다. 예를 들어, 다음이 있다고 가정해 보겠습니다 $PWD
.
ls
fsck
xz
chroot
을 실행하면 unzip foo.zip
모두 다음 디렉터리로 추출됩니다.
/bin
/sbin
/usr/bin
/usr/sbin
내가 찾을 수 있는 가장 가까운 것은 파일을 추출하려는 디렉터리 경로( $PWD
루트 디렉터리로 사용됨)에 이 파일이 이미 존재해야 한다는 것입니다.
$ zip foo.zip bin/ls sbin/fsck usr/bin/xz usr/sbin/chroot
그런 다음 추출하려는 시스템에서 다음을 수행해야 합니다.
$ cd /
$ sudo unzip foo.zip
답변1
이 명령을 사용하여 이 작업을 수행하는 방법을 찾지 못했지만 zip
Python에서는 쉽습니다.
참고하시기 바랍니다,zip 파일 형식 사양, 섹션 4.4.17.1에는 경로 이름이 "/"로 시작할 수 없다고 나와 있으므로 해당 부분에 대해서는 도움을 드릴 수 없습니다.
파이썬압축파일zip 아카이브에 파일을 추가하면 모듈을 사용하여 파일의 경로 이름을 재정의할 수 있습니다. 원하는 이름을 선택적 두 번째 인수로 전달하면 됩니다 ZipFile.write
.
ZipFile.write(filename[, arcname[,compress_type]])는
filename이라는 파일을 아카이브에 기록하고 아카이브 이름 arcname을 지정합니다(기본적으로 이는 filename과 동일하지만 드라이브 문자가 없고 선행 경로가 포함됨). 구분 기호가 제거되었습니다). 주어진 경우,compress_type은 새 항목의 생성자에 제공된 압축 인수의 값을 재정의합니다.
참고: 아카이브 이름은 아카이브 루트를 기준으로 해야 합니다. 즉, 경로 구분 기호로 시작하면 안 됩니다.
예는 다음과 같습니다.
$ touch 1 2 3
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
>>> import zipfile
>>> with zipfile.ZipFile('bundle.zip', 'w') as bundle:
... bundle.write('1', '/bin/1')
... bundle.write('2', '/sbin/2')
... bundle.write('3', '/usr/bin/3')
...
>>>
$ unzip -l bundle
Archive: bundle.zip
Length Date Time Name
--------- ---------- ----- ----
0 2014-08-11 13:00 bin/1
0 2014-08-11 13:00 sbin/2
0 2014-08-11 13:00 usr/bin/3
--------- -------
0 3 files
zipfile.write
표준을 준수하기 위해 경로 이름에서 선행 "/"가 제거됩니다 .