Script Python pour aplatir l'arbre extrait
Le script écrit ci-dessous extrait le fichier zip et déplace les fichiers contenus dans le répertoire le plus haut vers le répertoire de travail actuel. Ce script rapide est conçu pour répondre à cette question particulière où il existe un seul répertoire supérieur contenant tous les fichiers, bien qu'avec quelques modifications, il puisse être adapté à des cas plus généraux.
#!/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)
Essai
Voici un exemple de la façon dont le script est censé fonctionner. Tout est extrait dans le répertoire de travail actuel, mais le fichier source peut être complètement dans le répertoire différent. Le test est effectué sur l'archive zip de mon référentiel github personnel.
$ 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
Testez avec le fichier source dans un emplacement différent
$ 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/* .