Descompacte e renomeie um diretório em particular em zip - em uma operação

0

Digamos que eu tenha archive.zip que contém um diretório chamado myDir (na verdade, é o único diretório dentro dele) e que esse diretório contém um arquivo chamado x .

unzip archive.zip -d ~/ traz:

~/myDir/x

mv ~/myDir ~/myRenamedDir , traz:

~/myRenamedDir/x

Existe uma maneira de renomear meu myDir com a extração, então o resultado seria ~/myRenamedDir/x , diretamente, sem precisar de mv ?

    
por user9303970 04.02.2018 / 22:57

2 respostas

5

Considere o uso da opção unzip -j :

-j

      junk paths.  The archive’s directory structure is not recreated; all files are deposited in the extraction directory (by default, the current one).
Source: unzip(1)
unzip -d ~/myRenameDir/ -j  <FILE>
    
por 07.02.2018 / 02:46
1

Anthon escreveu um bom script para converter arquivos zip em arquivos tar. Com algumas modificações, você pode usar para converter um zip para tar e enviar o arquivo tar em um pipe para tar , e se você tiver o GNU tar , você pode usar o --transform para renomear as coisas. / p>

As modificações: use w| como o modo para que possamos gravar no stdout e use sys.stdout como um objeto de arquivo para abrir o arquivo 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])

Salve isto como, digamos, zip2tar.py , torne-o executável e você pode fazer:

zip2tar.py archive.zip | tar x -C ~ --transform 's/^myDir/myRenameDir/'

Ou se ~/myRenameDir já existir:

zip2tar.py archive.zip | tar x -C ~/myRenameDir --strip-components=1
    
por 07.02.2018 / 05:10