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