zip에서 특정 디렉터리의 압축을 풀고 이름 바꾸기 --- 단 한 번의 작업

zip에서 특정 디렉터리의 압축을 풀고 이름 바꾸기 --- 단 한 번의 작업

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.stdouttar 파일을 열려면 파일 객체로 사용합니다.

#! /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

관련 정보