Python-Skript zum Reduzieren des extrahierten Baums
Das unten geschriebene Skript extrahiert die Zip-Datei und verschiebt die im obersten Verzeichnis enthaltenen Dateien aus dem aktuellen Arbeitsverzeichnis. Dieses schnelle Skript ist auf diese spezielle Frage zugeschnitten, bei der es ein einziges oberstes Verzeichnis gibt, das alle Dateien enthält, obwohl es mit wenigen Änderungen für allgemeinere Fälle geeignet gemacht werden kann.
#!/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)
Testlauf
Hier ist ein Beispiel, wie das Skript funktionieren soll. Alles, was in das aktuelle Arbeitsverzeichnis extrahiert wurde, aber die Quelldatei kann sich insgesamt in einem anderen Verzeichnis befinden. Der Test wird im Zip-Archiv meines persönlichen Github-Repositorys durchgeführt.
$ 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
Testen Sie, ob sich die Quelldatei an einem anderen Speicherort befindet
$ 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/* .