शीर्ष निर्देशिका बनाए बिना विशिष्ट निर्देशिका खोलना


12

मेरे पास एक ज़िप फ़ाइल है जिसमें एक शीर्ष निर्देशिका है जहाँ सभी फाइलें संग्रहीत हैं:

Release/
Release/file
Release/subdirectory/file
Release/subdirectory/file2
Release/subdirectory/file3

मैं Releaseनिर्देशिका संरचना के संरक्षण के तहत सब कुछ निकालना चाहता हूं , लेकिन जब मैं इसे चलाता हूं:

unzip archive.zip Release/* -d /tmp

यह शीर्ष Releaseफ़ोल्डर बनाता है :

/tmp/Release/
/tmp/Release/file
/tmp/Release/subdirectory/file
/tmp/Release/subdirectory/file2
/tmp/Release/subdirectory/file3

कैसे मैं सब कुछ अंदर निकाल सकते हैं Release बिना एक बनाने Releaseफ़ोल्डर, इस तरह:

/tmp/
/tmp/file
/tmp/subdirectory/file
/tmp/subdirectory/file2
/tmp/subdirectory/file3

इसे आजमाएँunzip archive.zip && mv Release/* .
जॉर्ज उडोसन

@ यह अभी भी एक Releaseफ़ोल्डर बनाता है
jsta

जवाबों:


6

आपके मामले में, लक्ष्य फ़ोल्डर में प्रयास करें:

ln -s Release . && unzip <YourArchive>.zip

आपके द्वारा बनाए गए लिंक को हटाने की आवश्यकता है:

rm Release

3

jझंडा फ़ोल्डर निर्माण रोकने चाहिएunzip -j archive.zip -d .

से आदमी पेज :

-j 

junk paths. The archive's directory structure is not recreated; 
all files are deposited in the extraction directory (by default, the
current one).

9
मुझे लगता है कि यह करीब है, लेकिन ओपी केवल शीर्ष स्तर की निर्देशिका को छोड़ना और शेष निर्देशिका संरचना को संरक्षित करना चाहता था। -jविकल्प संग्रह में निर्देशिका संरचना के संबंध के बिना मौजूदा निर्देशिका में सभी फ़ाइलों उदासीनता।
चार्ल्स ग्रीन

1

निकाले गए पेड़ को समतल करने के लिए पायथन लिपि

स्क्रिप्ट लिखी गई bellow अर्क ज़िप फ़ाइल को ले जाती है और इसमें मौजूद सबसे ऊपरी निर्देशिका के भीतर मौजूद फ़ाइलों को वर्तमान कार्यशील निर्देशिका में ले जाती है। यह त्वरित स्क्रिप्ट इस विशेष प्रश्न के अनुरूप है जहां एक एकल शीर्ष निर्देशिका है जिसमें सभी फाइलें हैं, हालांकि कुछ संपादन के साथ अधिक सामान्य मामलों के लिए उपयुक्त बनाया जा सकता है।

#!/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)

परीक्षण चालन

यहाँ एक उदाहरण है कि स्क्रिप्ट को कैसे काम करना चाहिए। सब कुछ वर्तमान कार्यशील निर्देशिका में निकाला जाता है, लेकिन स्रोत फ़ाइल पूरी तरह से अलग-अलग निर्देशिका में हो सकती है। परीक्षण मेरे व्यक्तिगत गितुब भंडार के ज़िप संग्रह पर किया जाता है।

$ 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

स्रोत फ़ाइल का परीक्षण अलग-अलग स्थान पर किया जा रहा है

$ 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.