archive.zip
이라는 디렉터리를 포함하고 myDir
(실제로는 이 디렉터리가 유일한 디렉터리임) 해당 디렉터리에 이라는 디렉터리가 포함되어 있다고 가정해 보겠습니다 x
.
unzip archive.zip -d ~/
가져오다:
~/myDir/x
mv ~/myDir ~/myRenamedDir
,가져오다:
~/myRenamedDir/x
myDir
결과가 ~/myRenamedDir/x
직접적이고 필요하지 않도록 추출을 통해 내 이름을 바꾸는 방법이 있습니까 mv
?
답변1
고려해야 unzip
할 옵션 -j
:
-j
원천:압축 풀기(1)
정크 경로. 아카이브의 디렉터리 구조는 다시 생성되지 않습니다. 모든 파일은 압축이 풀린 디렉터리에 배치됩니다(기본값은 현재 디렉터리).
unzip -d ~/myRenameDir/ -j <FILE>
답변2
안톤이 썼다좋은 대본zip 파일을 tar 파일로 변환하는 데 사용됩니다. 일부 수정을 통해 zip을 tar로 변환하고 tar 파일 을 tar
.tar
--transform
수정: w|
stdout에 쓸 수 있도록 패턴으로 사용하고 sys.stdout
tar 파일을 열려면 파일 객체로 사용합니다.
#! /usr/bin/env python
"""zip2tar """
import sys
import os
from zipfile import ZipFile
import tarfile
import time
def main(ifn):
with ZipFile(ifn) as zipf:
with tarfile.open(fileobj=sys.stdin, mode='w|') as tarf:
for zip_info in zipf.infolist():
#print zip_info.filename, zip_info.file_size
tar_info = tarfile.TarInfo(name=zip_info.filename)
tar_info.size = zip_info.file_size
tar_info.mtime = time.mktime(list(zip_info.date_time) +
[-1, -1, -1])
# zip files don't have permissions, so
# make everything executable for now
tar_info.mode=0755
tarf.addfile(
tarinfo=tar_info,
fileobj=zipf.open(zip_info.filename)
)
main(sys.argv[1])
예를 들어 다른 이름으로 저장하고 zip2tar.py
실행 가능하게 만든 다음 다음을 수행할 수 있습니다.
zip2tar.py archive.zip | tar x -C ~ --transform 's/^myDir/myRenameDir/'
또는 ~/myRenameDir
이미 존재하는 경우:
zip2tar.py archive.zip | tar x -C ~/myRenameDir --strip-components=1