लिनक्स पर जिप संग्रह से एकल फ़ाइल निकालें


75

मेरे पास एक ज़िप संग्रह है ( -j -rझंडे के साथ स्क्रिप्ट में स्वचालित रूप से बनाया गया है ) और मैं इसमें से एक फ़ाइल को निकालना चाहूंगा। मैंने दस्तावेज के रूप में कोशिश की।

zip -d "picture_43_9.jpg" gallery.zip

लेकिन मुझे यह त्रुटि मिली:

zip warning: picture_43_9.jpg not found or empty   
zip error: Nothing to do! (picture_43_9.jpg)  

वैसे भी, वहाँ है संग्रहण के भीतर इस तरह के एक फ़ाइल और इसे खाली नहीं है:

unzip -l .../gallery.zip | grep -i 43_9.jpg  
1477092  2013-05-22 14:23   picture_43_9.jpg 

मैं गलत क्या कर रहा हूँ पर कोई विचार?

जवाबों:


103

आपके पास तर्क दिए गए हैं। इसे इस्तेमाल करे:

zip -d gallery.zip "picture_43_9.jpg" 

से जिप (1) आदमी पेज:

-d
--delete
ज़िप संग्रह से प्रविष्टियाँ हटाएं (हटाएं)। उदाहरण के लिए:

zip  -d  foo  foo/tom/junk  foo/harry/\*  \*.o

प्रविष्टि को हटा देगा foo/tom/junk, सभी फाइलें जो शुरू होती हैं foo/harry/, और सभी फाइलें जो .o(किसी भी पथ में) समाप्त होती हैं । ध्यान दें कि शेल पाथनेम विस्तार को बैकस्लैश के साथ बाधित किया गया है, ताकि ज़िप तारांकन को देख सकें, ज़िप को वर्तमान निर्देशिका की सामग्री के बजाय ज़िप संग्रह की सामग्री पर मेल करने के लिए सक्षम कर सकता है । (MSDOS- आधारित प्लेटफ़ॉर्म पर बैकस्लैश का उपयोग नहीं किया जाता है।) तारांकन से बचने के लिए उद्धरण का भी उपयोग कर सकते हैं जैसे कि

zip -d foo foo/tom/junk "foo/harry/*" "*.o"

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

MSDOS के तहत, -d जब यह नाम से मेल खाता है केस संवेदी है जिप संग्रह। इसके लिए आवश्यक है कि फ़ाइल नामों को ऊपरी मामले में दर्ज किया जाए यदि उन्हें MSDOS सिस्टम पर PKZIP द्वारा ज़िपित किया गया था। (हमने इस मामले को उन प्रणालियों पर असंवेदनशील बनाने पर विचार किया जहां पथ असंवेदनशील थे, लेकिन यह संभव है कि संग्रह एक प्रणाली से आया है जहां मामला मायने रखता है और संग्रह में संग्रह में दोनों Barऔर bar अलग-अलग फ़ाइलों के रूप में शामिल हो सकते हैं ।) लेकिन नया विकल्प देखें - संग्रह में मामले को नजरअंदाज करने के लिए आईसी


आप सही कह रहे हैं, धन्यवाद, मैं ज़िप की कमांड लाइन की मदद से भ्रमित हो गया zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
एलेक्स फ्लो

@AlexFlo: आपके पास मैन पेज की एक खराब कॉपी हो सकती है। ऊपर दी गई प्रति कहती है, "[ zipfile [ फ़ाइल ... ]]", जिसका अर्थ है कि आपके पास (क) कोई फ़ाइल नाम तर्क नहीं हो सकता है (हालांकि मुझे नहीं पता कि यह कैसे मान्य हो सकता है, इसके अलावा जब आप मदद मांग रहे हों ), (बी) एक zipfile (संग्रह फ़ाइल) नाम केवल, या (c) एक zipfile नाम जिसके बाद एक या अधिक साधारण फ़ाइल नाम हैं। (ये संग्रह में डाली जाने वाली वास्तविक फाइलों के नाम हो सकते हैं, या संग्रह सदस्यों के नामों में हेरफेर किए जा सकते हैं।)
स्कॉट 21

@AlexFlo - आप फ़ाइल का तर्क एसटीडीआईएन और पाइप टू के माध्यम से पारित कर सकते हैं zip, जैसा कि उस आदमी पृष्ठ में कहा गया है जिसे आपने उद्धृत किया था। उदाहरण के लिए, यदि आप किसी निर्देशिका में हैं file1.txt, file2.txtऔर file3.txt, आप निष्पादित कर सकते हैं ls -1 | zip -q 'files.zip' -@, जो files.zipआपके zipफाइलनाम के साथ पाइप की गई 3 फाइलों वाले संग्रह को बनाएगा ।
रुबिनोरेल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.