फ़ाइल सामग्री अनज़िप करें, लेकिन संग्रह फ़ोल्डर बनाए बिना


37

मेरे पास एक फ़ाइल myarchive.zip है जिसमें कई निर्देशिकाएं, फाइलें आदि हैं। मान लीजिए कि यह myarchive.zip फ़ाइल "b" नामक निर्देशिका में रहती है। खैर, जब मैं "अनज़िप myarchive.zip" कमांड का उपयोग करता हूं, तो सिस्टम ज़िप फ़ाइल की सामग्री के साथ "myarchive" नामक डिफ़ॉल्ट रूप से एक निर्देशिका बनाता है। मैं नहीं चाहता कि सिस्टम इस "myarchive" निर्देशिका का निर्माण करे - मैं चाहता हूं कि सामग्री को निर्देशिका "b" में निकाला जाए। क्या यह संभव है?

अब मैं जो कर रहा हूं, वह नई बनाई गई निर्देशिका (इस मामले में "myarchive" से "b") की फाइलों को कॉपी करने के लिए "cp" कमांड जारी कर रहा है जहां मैं उन्हें चाहता हूं।


8
डिफ़ॉल्ट रूप से, unzipकोई निर्देशिका नहीं बनाता है। आपकी ज़िप फ़ाइल में संभवतः इसके शीर्ष स्तर पर निर्देशिका है।
क्रिस डाउन

3
आप mvइसके बजाय उपयोग कर सकते हैं cpmv archive/* .; rmdir archive/या इसी के समान।
फ्रॉस्ट्सचुट्ज़

जवाबों:


45

मेरे संस्करण unzipएक है -jकिसी भी निर्देशिका नहीं बना करने के लिए विकल्प।

इसलिए

unzip -j /path/to/file.zip

zipफ़ाइल में संग्रहीत निर्देशिका संरचना को पुनर्स्थापित किए बिना सभी फ़ाइलों को वर्तमान निर्देशिका में निकाल देगा ।

यदि आप संग्रह से केवल एक स्तर की निर्देशिकाओं को निकालना चाहते हैं, (इसके myarchive/dir/fileरूप में निकालें dir/file, नहीं file), आप इसके बजाय bsdtar(जो zipफ़ाइलों के अलावा फ़ाइलों का समर्थन करता है tar) और इसके -sविकल्प का उपयोग कर सकते हैं ।

bsdtar -xf /path/to/file.zip -s'|[^/]*/||'

8
-jसंग्रह निर्देशिका संरचना का उपयोग करते समय पुनर्निर्मित नहीं किया जाता है और सभी फाइलें निष्कर्षण फ़ोल्डर में जमा हो जाती हैं। इसका मतलब यह है कि सभी सबफ़ोल्डर्स को गिरा दिया जाता है। तो अगर आपके पास होता zip/A/f1, zip/A/B/f2और zip/A/B/C/f3आप f1, f2, f3 के साथ एक एकल फ़ोल्डर के साथ समाप्त होते। यदि आपके पास अलग-अलग सबफ़ोल्डर में एक ही नाम की फाइलें हैं, तो यह फंकी हो जाता है। आमतौर पर आप शीर्ष फ़ोल्डर को पूरी निर्देशिका संरचना को नहीं छोड़ना चाहते हैं।
क्रिस्टियन Vrabie

3
@CristianVrabie, ठीक यही बात मैं जवाब में कह रहा हूँ। मैंने एक bsdtar विकल्प जोड़ा है जो आप पूछ रहे हैं। संपादित देखें।
स्टीफन चेजेलस


1

स्वीकार किए गए उत्तर में निर्दिष्ट नहीं है कि आप कैसे करें, जैसा कि आप सवाल में कहते हैं, यदि आप अभी भी ज़िप फ़ाइलों में संग्रहीत फ़ोल्डर पथों का उपयोग किए बिना किसी विशिष्ट फ़ोल्डर में निकालना चाहते हैं, तो आप इस तरह से -jविकल्प के साथ -dविकल्प का उपयोग कर सकते हैं :

unzip -j /path/to/file.zip -d other_folder

या आपके मामले के लिए

unzip -j myarchive.zip -d b

2
आप सही हैं कि आप ऐसा कर सकते हैं; लेकिन यह उपनिर्देशिका नहीं बनाएगा ताकि आपको अभी भी एक और कदम शामिल करना पड़े; मुझे पूरा यकीन है कि ओपी आर्क के रूट डायरेक्टरी का नाम बदलकर दूसरे नाम पर रखना चाहता है, लेकिन बाकी डायरेक्शन को उस डायरेक्टरी के तहत रखता है।
प्रिएफ्तान

-1

यदि प्रदर्शन इसमें सब कुछ के साथ unzip myarchive.zipएक निर्देशिका का उत्पादन करता है myarchive, तो इसका मतलब है कि ज़िप फ़ाइल के निर्माता ने वास्तव में उस निर्देशिका पर ज़िप का प्रदर्शन किया है।

आप जो चाहते हैं उसे बनाने का एकमात्र तरीका है कि आप प्रदर्शन के बाद निर्देशिका के बाहर की सभी सामग्रियों को स्थानांतरित करें unzip:

[user@host]:some/path/b$ unzip myarchive.zip

[user@host]:some/path/b$ ls{ शो निर्देशिकाmyarchive }

[user@host]:some/path/b$ mv myarchive/* .

[user@host]:some/path/b$ rm -R myarchive

[user@host]:some/path/b$ ls{ प्रथम स्तर का (सीधे b) में दिखाता है }


1
तुम भी एक की जरूरत है mv myarchive/.* .सभी। छिपी और .htaccess की तरह छिपा फ़ाइलें स्थानांतरित करने के लिए।
किंजल दीक्षित

1
@ किंजल दीक्षित मेरी भी यही सोच थी; एंटोइन आपके उदाहरण में एक घातक दोष है क्योंकि किन्जई बताते हैं: क्योंकि आप उपयोग करते हैं rm -Rऔर क्योंकि आप उपयोग नहीं कर रहे हैंls -a रहे हैं यदि आप कोई डॉट फाइल नहीं दिखा रहे हैं; अब जब आप चलाते हैं rm -Rऔर डॉट फाइलें होती हैं तो क्या होता है ? आपने उन्हें कॉपी नहीं किया है इसलिए वे खो गए हैं। आपको वास्तव में इसे ठीक करना चाहिए और शायद अंतर को समझाना चाहिए क्योंकि यह कुछ ऐसा है जो न्यूबाय को काफी ऊपर ले जाएगा; और इस पर विचार करें: क्या होगा यदि उनके पास एक संग्रह नहीं है? या क्या होगा अगर वे एक बार असम्पीडित संग्रह को हटाने के लिए कमांड में जोड़ते हैं?
फ्राईफटन

ओटोह rmdirयह सुनिश्चित करेगा कि यह पहले खाली हो ... लेकिन अगर उपयोगकर्ता डॉट फ़ाइलों के बारे में नहीं जानता है तो यह उन्हें भ्रमित करेगा।
प्रिएफ्टन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.