Script Python per appiattire l'albero estratto
Lo script scritto qui sotto estrae il file zip e sposta i file contenuti nella directory più in alto fuori dalla directory corrente di lavoro. Questo script veloce è adattato per soddisfare questa particolare domanda in cui esiste un'unica directory più in alto che contiene tutti i file, anche se con poche modifiche può essere resa adatta a casi più generali.
#!/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)
Prova
Ecco un esempio di come dovrebbe funzionare lo script. Tutto viene estratto nella directory di lavoro corrente, ma il file di origine può trovarsi in una directory completamente diversa. Il test viene eseguito sull'archivio zip del mio repository github personale.
$ 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
Test con il file di origine in una posizione diversa
$ 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/* .