解压缩并重命名 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,如果您有 GNU tar,则可以使用该--transform标志来重命名。

修改:用作w|模式,以便我们可以写入标准输出,并用作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

相关内容