zipから特定のディレクトリを解凍して名前を変更する --- 1回の操作

zipから特定のディレクトリを解凍して名前を変更する --- 1回の操作

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ファイルをtartar--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

関連情報