मैं छिपी फ़ाइलों के बिना टर्मिनल के माध्यम से पूरी निर्देशिका का ज़िप संग्रह कैसे बना सकता हूं?


219

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

मुझे पता है कि मैं इस तरह एक निर्देशिका का ज़िप संग्रह बना सकता हूं:

zip -r zipfile.zip directory

मुझे यह भी पता है कि मैं -x विकल्प के साथ फ़ाइलों को बाहर कर सकता हूं, इसलिए मैंने सोचा कि यह काम कर सकता है:

zip -r zipfile.zip directory -x .*

यह काम नहीं किया। सभी छिपी निर्देशिका अभी भी ज़िप-फ़ाइल में थीं।

जवाबों:


107

यह अप्रयुक्त निर्देशिकाओं में छिपी हुई फाइलों को भी बाहर करता है:

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@

2
आपके उत्तर के लिए धन्यवाद। आदेश ( find community-chess/ -path '*/.*' -prune -o -type f -print | zip ~/community-chess.zip -@) अपेक्षा से अधिक लंबा है, लेकिन यह ठीक काम करता है। उपनिर्देशिकाएँ भी शामिल हैं, इसलिए +1 और एक स्वीकृत उत्तर :-)
मार्टिन थोमा

103

यदि आपने ज़िप स्थापित नहीं किया है तो सबसे पहले इसे निम्न प्रकार से स्थापित करें:

sudo apt-get install zip

तो बस एक ज़िप फ़ाइल बनाने के लिए:

zip -r compressed_filename.zip foldername

यदि आप छिपी हुई फ़ाइलों को बाहर करना चाहते हैं:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@

ज़िप आर्काइव की फ़ाइलों को छोड़कर ( http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/ से लिया गया )

ज़िप संग्रह बनाते समय फ़ाइल बहिष्करण की मूल बातें -xध्वज के चारों ओर केंद्रित होती हैं , जिसका उपयोग संग्रह से फ़ाइलों को बाहर करने के लिए किया जाता है जो किसी विशिष्ट नाम या पैटर्न से मेल खाते हैं। यह सबसे बुनियादी है, यह इस तरह दिखेगा:

zip archive.zip files -x "ExcludeMe"

मतलब आप एक फ़ाइल को बाहर कर सकते हैं, कहते हैं कि इसका नाम "Nothanks.jpg" है

zip archive.zip images/ -x "Nothanks.jpg"

आइए कुछ विशिष्ट उदाहरणों को कवर करें जहां यह उपयोगी है।

ज़िप अभिलेखागार से .DS_Store फ़ाइलें बाहर निकालें

यह आमतौर पर अदृश्य मैक मेटाडेटा .DS_Store फ़ाइलों को ज़िप आर्काइव में शामिल करने से रोकेगा , जिन्हें डिफ़ॉल्ट रूप से बंडल किया जाता है:

zip -r archivename.zip archivedirectory -x "*.DS_Store"

यदि निर्देशिका में उपनिर्देशिकाएँ शामिल हैं, तो आप ds_store फ़ाइलों को उपनिर्देशिकाओं से अलग करने के लिए उस आदेश की एक और भिन्नता का उपयोग करना चाहेंगे:

zip -r archive.zip directory -x "*/\.DS_Store"

नोट: सभी शेल को इस कमांड के ठीक से काम करने के लिए कोटेशन की आवश्यकता नहीं है, लेकिन बैश शेल (ओएस एक्स के लिए डिफ़ॉल्ट) में आपको वाइल्डकार्ड और पैटर्न को छोड़कर उद्धरणों का उपयोग करना होगा।

ज़िप आर्काइव से विशिष्ट फ़ाइल प्रकारों को छोड़ दें

वाइल्डकार्ड के साथ, आप एक्सटेंशन पर ध्यान केंद्रित करके एक निश्चित प्रकार की सभी फ़ाइलों को भी बाहर कर सकते हैं। उदाहरण के लिए, यह कमांड एक संपूर्ण निर्देशिका, किसी भी .jpgफाइल को शून्य करेगा :

zip -r archive.zip directory -x "*.jpg"

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

एक ज़िप संग्रह से .it या .svn निर्देशिका को बाहर करें

एक निर्देशिका, माइनस को ज़िप करें .gitऔर यह सामग्री है:

zip -r zipdir.zip directorytozip -x "*.git*"

.svnनिर्देशिका सहित बिना किसी फ़ोल्डर को ज़िप करें :

zip -r zipped.zip directory -x "*.svn*"

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

चूंकि पैटर्न और वाइल्डकार्ड इस्तेमाल किया जा सकता है, तो आप भी किसी एक या सभी अदृश्य फ़ाइलों और फ़ोल्डरों कि एक अवधि के साथ उपसर्ग किया जा रहा द्वारा ऐसा किया जाता है बाहर कर सकते हैं, यह की तरह एक निर्देशिका है, चाहे .svnया की तरह किसी एक फ़ाइल .bash_profileया .htaccess

zip -r archivename.zip directorytozip -x "*.*"

या सभी उपनिर्देशिकाओं से सभी अदृश्य फ़ाइलों को बाहर करने के लिए:

zip -r archive.zip directory -x "*/\.*"

5
एक साथी Ubuntu उपयोगकर्ता की मदद करने के आपके प्रयास के लिए धन्यवाद। कृपया ध्यान रखें कि एक नए उत्तर में स्वीकृत उत्तर को फिर से बताते हुए केवल अव्यवस्था में जोड़ा जाता है और हटाने के लिए ध्वजांकित होने की उच्च संभावना है।
हमायग

54

जोड़े "को .*(अन्यथा, अपने खोल फैलता .*उपनिर्देशिका में मौजूदा निर्देशिका में डॉट फ़ाइलों के लिए), और भी बाहर निकालने के छिपी हुई फ़ाइलें:

zip -r zipfile.zip . -x ".*" -x "*/.*"

यह .आपकी ज़िप फ़ाइल में शामिल नहीं की जाने वाली फ़ाइलों से शुरू होगा ।

rinzwind@discworld:~/tmp$ ls -la
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmp
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmp
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)

1
मुझे नहीं लगता कि आपका अंतिम कथन सही है। .*खोल से विस्तार होगा।
हम्मीर

1
मुझे लगता है कि यह सही होने की संभावना है लेकिन मैंने इसे हटा दिया (इसके बारे में निश्चित नहीं) :)
रिनविंड

यह काम नहीं किया। .Svn- निर्देशिका को जोड़ा गया था
मार्टिन थोमा

1
@moose बहिष्कृत प्रतिरूप पूर्ण पथ से मेल खाता है, न कि केवल फ़ाइल बेस नाम से, इसलिए आपको और */.*साथ ही बाहर करने की आवश्यकता है .*( */निर्देशिका के किसी भी गैर-रिक्त अनुक्रम से मेल खाता है)।
गिल्स

बिना कुछ बदले यह चलता है! सबसे बढ़िया उत्तर।
व्हिटेकैट

8

इसमें सभी शामिल हैं "।" निर्देशिका, उपनिर्देशिका, और ""। फ़ाइलों या निर्देशिकाओं के भीतर निर्देशिका ... अनिवार्य रूप से पहला उत्तर लेकिन शीर्ष स्तर शामिल है "।" फ़ाइलें।

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@

8

के साथ भीख माँगने वाले सभी फ़ोल्डरों को बाहर करने के लिए उदाहरण। :

tar cvpzf folder.tgz folder/ --exclude '.*'

बेहतर सेक लेकिन धीमा:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'

5

सही तरीका होगा:

zip -r zipfile.zip directory -x directory/.*

@downvoter: क्या गलत है, यह मेरे लिए काम कर रहा है।
जॉबिन

रिनजविंड के मूल उत्तर (अब सही) के साथ भी यही समस्या है : आप उपनिर्देशिका को छोड़कर नहीं हैं। और जैसा कि रिनविंड ने उल्लेख किया है, आपको वाइल्डकार्ड को उद्धृत करने की आवश्यकता है, अन्यथा शेल उन्हें विस्तारित करेगा।
गिल्स

4

कुछ फ़ाइल एक्सटेंशन को छोड़कर dirs ज़िप करते समय:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"

3

निर्देशिका में छिपे हुए फ़ोल्डर और फ़ाइलों के बिना:

zip -r zipfile.zip directory/*

निर्देशिका: |── .git │   ├── src │   └── Work.file ├── .test │   └── .file └── test.file

$ zip -r zipfile.zip directory/*
adding: directory/src/ (stored 0%)
adding: directory/src/Work.file (stored 0%)
adding: directory/test.file (stored 0%)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.