यूनिक्स ज़िप निर्देशिका लेकिन विशिष्ट उपनिर्देशिका को छोड़कर (और उनके भीतर सब कुछ)


115

मैं एक निर्देशिका (यूनिक्स पर एसएसएच के माध्यम से) को ज़िप करने की कोशिश कर रहा हूं, लेकिन मुझे कुछ उपनिर्देशिकाओं (और उनके भीतर सभी फाइलें और निर्देशिका) को बाहर करने की आवश्यकता है।

अब तक मेरे पास यह है:

zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/* 

हालांकि यह काम करने के लिए प्रतीत नहीं होता है।

मैंने भी कोशिश की

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*

हालाँकि यह अभी भी ignDir1 और ignDir2 के भीतर उपनिर्देशिका शामिल करेगा।

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

क्या किसी को भी यह करना आता है?


@AlexanderMills - यह सवाल देखें।
jww

जवाबों:


130

मैंने बस कर ही दिया था!

मुझे जो वास्तविक कमांड चाहिए वह है:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*

कूल, और फॉलो अप के लिए धन्यवाद! आप अपने स्वयं के उत्तर को स्वीकार कर सकते हैं, वैसे।
डेनियल एच।

2
यह मेरे लिए osx पर काम नहीं किया। @pathfilder जवाब हालांकि किया था।
रिनोप

11
इसके बजाय: -x dir1 / ignDir1 / ** \ *, आप ऐसा कर सकते हैं: -x dir1 / ignDir1 / \ *
रिचर्ड गोम्स

67

मेरी विशेष प्रणाली के लिए एक निर्देशिका को बाहर करने के लिए मुझे अपने बहिष्कृत निर्देशिकाओं के आसपास उद्धरण देना पड़ता था और यह एक आकर्षण की तरह काम करता था:

zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"

टिप्पणियाँ:

- यह निर्देशिका को बाहर करने के लिए और इसके अंदर सभी फ़ाइलों को बाहर कर दिया।

- आपको उन निर्देशिकाओं के लिए पूर्ण पथ का उपयोग करना होगा जिन्हें आप बाहर करना चाहते हैं!


5
यह वह है जो मैक ओएस पर काम करता है। :-)
शारीरिक

9
जैसा कि किसी ने भी रास्तों को उद्धृत करने या तारांकन से बचने के लिए कारण की व्याख्या नहीं की है, इसका कारण यह है: यदि पथ उद्धृत नहीं किया गया है या वाइल्डकार्ड बच गया है, तो शेल उन्हें पास करने से पहले वाइल्डकार्ड विस्तार का प्रदर्शन करेगा zip, जिसे सूची प्राप्त होगी निर्दिष्ट निर्देशिकाओं में प्रविष्टियों के लिए पथ, लेकिन उन के उपनिर्देशिकाओं के भीतर फ़ाइलों के लिए पथ नहीं है, इस प्रकार zipदिए गए निर्देशिकाओं के तहत सब कुछ अनदेखा नहीं करने के लिए कारण ।
ज़गरिस्मान 13

मुझे लगता है कि मूल रूप से इस पर काम करने का एक कारण यह था कि मैक ओएस पर मेरी निर्देशिकाओं में रिक्त स्थान थे और इसने
पाथफाइंडर

@Zagrimsan को साफ करने के लिए धन्यवाद। कि दोनों ने समस्या को ठीक किया और इसके कारण को समझाया ताकि हम इसे समझें (जो भविष्य में अन्य चीजों के लिए भी काम आएगा)। 👍
Synetech

8

@ सलमान का उपयोग:

     zip -r myarchive.zip dir1 -x dir1 / ignDir1 / ** \ * dir1 / ignDir2 / ** \ *

अभी भी जिर संग्रह में dir1 / ignDir1 / खाली फ़ोल्डर शामिल होंगे, का उपयोग करते हुए:

     zip -r myarchive.zip dir1 -x dir1 / ignDir1 ** dir1 / igniririr **

चाल करेंगे, आप केवल dir1 के बजाय सबफ़ोल्डर्स में खोज करने के लिए एक अग्रणी ** का उपयोग कर सकते हैं


आह अच्छा! इस पर प्रकाश डालने के लिए धन्यवाद!
sulman

7

निम्नलिखित करेंगे

zip -r myarchive.zip dir1 -x dir1 / ignDir1 \ * dir1 / ignDir2 \ *

**@Sulman के लिए आपको क्या चाहिए था ?

यह मेरे लिए एक आकर्षण की तरह काम करता है:

[root@ip-00-000-000-000 dir1]# ls -lrt dir1/ 
total 16
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir1
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir2
drwxr-xr-x 2 root root 4096 Oct 31 07:39 dir3
-rw-r--r-- 1 root root    8 Oct 31 07:39 test.txt

[root@ip-00-000-000-000 temp]# zip -r dir1.zip dir1 -x dir1/ignoredir1\* dir1/ignoredir2\*
  adding: dir1/ (stored 0%)
  adding: dir1/dir3/ (stored 0%)
  adding: dir1/dir3/test3.txt (deflated 13%)
  adding: dir1/test.txt (stored 0%)

मुझे नहीं पता कि ** की आवश्यकता क्यों है। हो सकता है कि कोई और इस पर कुछ प्रकाश डाल सकता है?
सुलेमान

क्षमा करें, @sulman, मैंने गलत तरीके से टाइप किया। मेरा मतलब है कि मेरे नवीनतम संपादन के अनुसार। मेरे लिए एक आकर्षण की तरह काम करता है :)
ericn

1

अन्य उत्तरों की तरह, लेकिन निर्देशिका की सभी सामग्रियों को छोड़कर, पूरी तरह से निर्देशिकाओं को छोड़कर:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*

0

मुझे यह डेविड आर हेफेलिंगर से काम करने के लिए मिला :

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1\ignorDir2\*

यह निर्देशिका और इसकी सामग्री को बाहर कर दिया।


निश्चित रूप से बीच में बैकस्लैश है dir1और ignorDir2इसका मतलब आगे की स्लैश है। क्या आपके पास अन्य बैकस्लैश के लिए बैकस्लैश होने का मतलब है? यदि आप करते हैं, तो आपने अभी दो साल पहले से फजीबी के जवाब की नकल की है।
जी-मैन

-1

मेरे लिए काम किया: zip -9 -r ~ / folded.zip ऑनलाइन -x फ़ोल्डर / folder2 / folder3 / foldern / \ *

ऐसा लगता है कि तारांकन से बच जाना चाहिए।


2
यह रिक एरहार्ट द्वारा समाधान से एक साल पहले, या एरिक (कुछ और साल पहले) से कैसे अलग है? कृपया एक नया पोस्ट करने से पहले दिए गए समाधानों को पढ़ें ...
zagrimsan

क्योंकि मैंने तारांकन से पहले एक बैकस्लैश जोड़ा (जो तारांकन से बचने के लिए है)। अगर मैं ऐसा नहीं करता तो मेरे काम में लिनक्स संस्करण काम नहीं करता।
फ्रांसिस्को एम

इसके अलावा रिक इरहार्ट (2014) और एरिक (2012) ने एक ही समाधान (तारांकन से बचने के लिए) पोस्ट किया। समाधान के साथ कुछ भी गलत नहीं है, लेकिन एक ही बार एक ही पोस्ट करने से कोई मतलब नहीं है जब तक कोई समाधान की गहराई से यह नहीं बता सकता है कि समाधान क्यों काम करता है। इस तरह के एक साधारण मामले में, अधिक स्पष्ट करने के लिए कुछ भी नहीं है। कृपया इसे व्यक्तिगत रूप से न लें, यहां मेरा एकमात्र उद्देश्य एसयू को साफ और संक्षिप्त रखने में मदद करना है ताकि उपयोगकर्ता कम से कम प्रयास के साथ सबसे अच्छा समाधान पा सकें।
zagrimsan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.