Considere o uso da opção unzip
-j
:
-j
Source: unzip(1)
junk paths. The archive’s directory structure is not recreated; all files are deposited in the extraction directory (by default, the current one).
unzip -d ~/myRenameDir/ -j <FILE>
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
?
Considere o uso da opção unzip
-j
:
-j
Source: unzip(1)
junk paths. The archive’s directory structure is not recreated; all files are deposited in the extraction directory (by default, the current one).
unzip -d ~/myRenameDir/ -j <FILE>
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