Directory

解壓縮並重命名 zip 中的特定目錄 — 一次操作

  • February 13, 2018

假設我有archive.zip一個名為的目錄myDir(它實際上是其中唯一的目錄),並且該目錄包含一個名為x.

unzip archive.zip -d ~/帶來:

~/myDir/x

mv ~/myDir ~/myRenamedDir,帶來:

~/myRenamedDir/x

有沒有辦法myDir通過提取重命名我的,所以結果會~/myRenamedDir/x直接,不需要mv

考慮使用unzip’s-j選項:

-j

垃圾路徑。檔案的目錄結構不會重新創建;所有文件都存放在解壓目錄中(預設為目前目錄)。

來源:解壓(1)

unzip -d ~/myRenameDir/ -j  <FILE>

Anthon 編寫了一個很好的腳本,用於將 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

引用自:https://unix.stackexchange.com/questions/421891