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


150

मुझे एक ज़िप फ़ाइल से एक एकल फ़ाइल निकालने की ज़रूरत है जिसे मैं निकालने का रास्ता जानता हूं। क्या निम्नलिखित की तरह एक कमांड है:

unzip -d . myarchive.zip path/to/zipped/file.txt

दुर्भाग्य से, उपर्युक्त कमांड अर्क और फाइल के पूरे पथ को फिर से बनाता है ./path/to/zipped/file.txt। क्या मेरे लिए एक निर्दिष्ट निर्देशिका में फ़ाइल को केवल बाहर निकालने का कोई तरीका है?

जवाबों:


130

आप -pविकल्प के साथ मानक आउटपुट के लिए सिर्फ पाठ निकाल सकते हैं :

unzip -p myarchive.zip path/to/zipped/file.txt >file.txt

यह मेटाडेटा (दिनांक, अनुमतियां,…), केवल फ़ाइल सामग्री नहीं निकालेगा। फ़ाइल को बाद में स्थानांतरित नहीं करने की सुविधा के लिए भुगतान करने की कीमत है।

वैकल्पिक रूप से, संग्रह को एक निर्देशिका के रूप में माउंट करें और बस फ़ाइल की प्रतिलिपि बनाएँ। AVFS के साथ :

mountavfs
cp -p ~/.avfs"$PWD/myarchive.zip#"/path/to/zipped/file.txt .

या फ्यूज-जिप के साथ :

mkdir myarchive.d
fuse-zip myarchive.zip myarchive.d
cp -p myarchive.d/path/to/zipped/file.txt .
fusermount -u myarchive.d; rmdir myarchive.d

2
@ टीके कोचरन: आप इसे सिर्फ क्यों नहीं परखते? मैंने पहले कमांड का परीक्षण किया, और यह काम किया।
उपयोगकर्ता अज्ञात

1
@TKKocheran: जार फाइलें ज़िप हैं, इसलिए अनज़िप और फ़्यूज़-ज़िप तरीके स्पष्ट रूप से काम करेंगे। AVFS विधि भी काम करती है, क्योंकि AVFS फ़ाइल नामों के आधार पर प्रारूप का अनुमान लगाता है और इसके बारे में जानता है .jar; यदि आपकी फ़ाइल का नाम अलग-अलग है, तो आपको एवीएफएस को अपने ज़िप हैंडलर का उपयोग करने के लिए बताने की आवश्यकता हो सकती है, जैसे ~/.avfs$PWD/foo.apk#uzip/META-INF
गिल्स

1
वास्तव में, मेरा मतलब एक ज़िप संग्रह में एक JAR / बाइनरी फ़ाइल निकालना था। मुझे अभी तक इसका परीक्षण करने का मौका नहीं मिला है, क्या आप बाइनरी फ़ाइलों को निकालने के लिए ऊपर दिए गए पहले कमांड का उपयोग करके कोई समस्या देख सकते हैं?
Naftuli Kay

2
@TKKocheran: कोई समस्या नहीं है, -pफ़ाइल को इस रूप में निकालता है ( -cपाठ रूपांतरण करता है)।
गाइल्स

2
मुझे लगता है कि @ शैलियों का उत्तर अधिक सुरुचिपूर्ण है, क्योंकि इसमें आउटपुट पुनर्निर्देशन की आवश्यकता नहीं है और यह फ़ाइल विशेषताओं को संरक्षित करता है।
gertvdijk

152
unzip -j "myarchive.zip" "in/archive/file.txt" -d "/path/to/unzip/to"

ज़िपित फ़ाइल के लिए पूर्ण पथ दर्ज करें, न कि केवल फ़ाइल नाम। ज़िप फ़ाइल के भीतर से देखी गई संरचना को रखना सुनिश्चित करें।

यह एकल फ़ाइल निकालने जाएगा file.txtमें myarchive.zipकरने के लिए /path/to/unzip/to/file.txt


18
यह बेहतर उत्तर है।
लालबत्ती

1
यह उस मामले को नहीं संभालता है जहाँ आप उत्पन्न फ़ाइल नाम को अलग करना चाहते हैं।
ओलेग वासवेविच

6
"-जे" पैरामटर: जंक पाथ्स। संग्रह की निर्देशिका संरचना को फिर से बनाया नहीं गया है; सभी फाइलें निष्कर्षण निर्देशिका (डिफ़ॉल्ट रूप से, वर्तमान एक) में जमा की जाती हैं। "-d" पैरामीटर: एक्सडिर में फाइल निकालें
e1i45

1
@OlegVaskevich, सवाल अलग होने के लिए लक्ष्य नाम का अनुरोध नहीं करता है
टेपमेस्टर

हाँ मुझे पता है। फिर भी मतदान हुआ। :)
ओलेग वासकेविच

24

सरल संस्करण:

unzip ARCHIVE_NAME PATH_OF_FILE_INSIDE_ARCHIVE

यह PATH_OF_FILE_INSIDE_ARCHIVEवर्तमान निर्देशिका में फिर से बनाएगा लेकिन केवल निर्दिष्ट फ़ाइल निकालता है।

जिप संग्रह में सभी फाइलों को सूचीबद्ध करने के लिए:

unzip -l ARCHIVE_NAME

1
स्वीकृत उत्तर की तुलना में बहुत सरल।
फ्रैक्टलस्पेस

वास्तव में, ठीक काम किया है और यह आसान है
महमूद अली

2

MacOS पर , जो डिफ़ॉल्ट रूप से Info-Zip का उपयोग करता है

आप जो चाहते हैं, उसे खोजने के लिए पहले फाइलों को सूचीबद्ध करें

unzip -l my.zip

फिर संग्रह से निकालने के लिए फ़ाइलों की एक सूची प्रदान करें

unzip my.zip annoying/path/to/file

Stdout के लिए -p के साथ मिलाएं

unzip -p my.zip annoying/path/to/file >./file

1
मुझे समझ में नहीं आता कि लोग बिना किसी स्पष्ट कारण के नीचे क्यों आते हैं। यह एक सही उत्तर है (न कि केवल
macOS के

@FractalSpace यह पेटेंट नहीं है, यह ओपी जो चाहता है उसके विपरीत करता है।
कोनराड रुडोल्फ

कुंजी को एक व्यक्तिगत फ़ाइल मिल रही है। स्टॉपआउट और -p फ्लैग का उपयोग करके रीडायरेक्ट करने के लिए आउटपुट तुच्छ है, लेकिन मैंने इसे स्पष्ट रूप से जोड़ा है
कैमरन लोवेल पामर

2

सरल उपयोग:

unzip zipfile.zip path/inside/zip/file.txt

और यह फ़ाइल को फुलाएगा।

$ unzip -l ./../html.zip | grep wp-config

     3328  07-22-2019 15:10   html/wp-config.php

     2898  01-07-2019 23:30   html/wp-config-sample.php

$ unzip ./../html.zip html/wp-config.php

     Archive:  ./../html.zip
     inflating: html/wp-config.php

$ ls -lrth

     total 4.0K
     drwxr-sr-x 2 apache apache 4.0K Jul 26 14:41 html

$ ls -lrth html/*

     total 4.0K
     -rw-rw-rw- 1 apache apache 3.3K Jul 22 15:10 wp-config.php

यह -d outpathनिर्दिष्ट करने के लिए तर्क भी जोड़ सकते हैं कि फ़ाइल को कहाँ रखा गया है।
Efren

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