Çıkarılan ağacı düzleştirmek için Python betiği
Feryat yazılı komut dosyası zip dosyasını ayıklar ve en üstteki dizinde bulunan dosyaları geçerli çalışma dizinine taşır. Bu hızlı komut dosyası, tüm dosyaları içeren tek bir en üstteki dizinin olduğu bu özel soruya uyacak şekilde uyarlanmıştır, ancak birkaç düzenleme ile daha genel durumlar için uygun hale getirilebilir.
#!/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)
Test sürüşü
İşte betiğin nasıl çalışacağına dair bir örnek. Her şey geçerli çalışma dizinine ayıklanır, ancak kaynak dosya tamamen farklı dizinde olabilir. Test, kişisel github veri havuzumun zip arşivinde gerçekleştirilir.
$ 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
Kaynak dosya farklı konumdayken test edin
$ 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/* .