Script de Python para aplanar el árbol extraído
El script escrito a continuación extrae el archivo zip y mueve los archivos contenidos dentro del directorio superior al directorio de trabajo actual. Este script rápido está diseñado para adaptarse a esta pregunta en particular, donde hay un único directorio superior que contiene todos los archivos, aunque con algunas ediciones puede hacerse adecuado para casos más generales.
#!/usr/bin/env python3
import sys
import os
from zipfile import PyZipFile
for zip_file in sys.argv[1:]:
pzf = PyZipFile(zip_file)
namelist=pzf.namelist()
top_dir = namelist[0]
pzf.extractall(members=namelist[1:])
for item in namelist[1:]:
rename_args = [item,os.path.basename(item)]
print(rename_args)
os.rename(*rename_args)
os.rmdir(top_dir)
Prueba de funcionamiento
Aquí hay un ejemplo de cómo se supone que funciona el script. Todo se extrae al directorio de trabajo actual, pero el archivo fuente puede estar en un directorio completamente diferente. La prueba se realiza en el archivo zip de mi repositorio personal de github.
$ ls
flatten_zip.py* master.zip
$ ./flatten_zip.py master.zip
['utc-time-indicator-master/.gitignore', '.gitignore']
['utc-time-indicator-master/LICENSE', 'LICENSE']
['utc-time-indicator-master/utc-time-indicator', 'utc-time-indicator']
['utc-time-indicator-master/utc_indicator.png', 'utc_indicator.png']
$ ls
flatten_zip.py* LICENSE master.zip utc_indicator.png utc-time-indicator
Prueba con el archivo fuente en una ubicación diferente
$ mkdir test_unzip
$ cd test_unzip
$ ../flatten_zip.py ../master.zip
['utc-time-indicator-master/.gitignore', '.gitignore']
['utc-time-indicator-master/LICENSE', 'LICENSE']
['utc-time-indicator-master/utc-time-indicator', 'utc-time-indicator']
['utc-time-indicator-master/utc_indicator.png', 'utc_indicator.png']
$ ls
LICENSE utc_indicator.png utc-time-indicator
unzip archive.zip && mv Release/* .