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


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

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

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

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

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

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

हालांकि इसमें अभी भी ignoreDir1 के भीतर उपनिर्देशिकाएं शामिल होंगी और dir2 को अनदेखा करेंगी।

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

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


85
2017-07-19 10:19


मूल


@AlexanderMills - इस सवाल को देखें। - jww


जवाब:


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

मुझे आवश्यक वास्तविक आदेश है:

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

92
2017-07-19 10:32



कूल, और पीछा करने के लिए धन्यवाद! आप अपना जवाब स्वीकार कर सकते हैं। - Daniel H
बस मैं क्या देख रहा था, धन्यवाद दोस्त! - Latheesan
यह ओएसएक्स पर मेरे लिए काम नहीं किया। @pathfilder जवाब हालांकि किया था। - rynop
इसके बजाय: -x dir1 / ignoreDir1 / ** \ *, आप यह कर सकते हैं: -x dir1 / ignoreDir1 / \ * - Richard Gomes


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

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

टिप्पणियाँ:

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

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


55
2017-10-31 11:43



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


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

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

आपको क्या चाहिए ** के लिए, सुल्मन?

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

[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%)

6
2017-09-17 05:00



मुझे नहीं पता कि ** क्यों जरूरी है। शायद कोई और इस पर कुछ प्रकाश डाल सकता है? - sulman
क्षमा करें, @ सुल्मन, मैंने गलत टाइप किया। मेरा मतलब है कि मेरे नवीनतम संपादन के अनुसार। मेरे लिए एक आकर्षण की तरह काम करता है :) - ericn


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

     ज़िप-आर myarchive.zip dir1 -x dir1 / ignoreDir1 / ** \ * dir1 / ignoreDir2 / ** \ *

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

     ज़िप-आर myarchive.zip dir1 -x dir1 / ignoreDir1 ** dir1 / ignoreDir2 **

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


4
2017-10-30 11:31



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


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

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

1
2018-01-22 14:39





मैंने इसे काम करने के लिए पाया डेविड आर हेफेलिंगर:

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

इसमें निर्देशिका और इसकी सामग्री शामिल नहीं है।


0
2017-10-03 18:28



निश्चित रूप से बैकस्लैश के बीच dir1 तथा ignorDir2 एक फॉरवर्ड स्लैश होने के लिए है। क्या आप बैकस्लाश के लिए अन्य बैकस्लाश के लिए मतलब है? यदि आप करते हैं, तो आपने दो साल पहले फ़ज़ीबी के जवाब की प्रतिलिपि बनाई है। - G-Man


मेरे लिए काम किया:  ज़िप -9-आर ~ / folded.zip ऑनलाइन -x फ़ोल्डर / फ़ोल्डर 2 / फ़ोल्डर 3 / फ़ोल्डर्न /\ *

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


-1
2017-12-01 13:29



यह एक साल पहले रिक एहर्रेट द्वारा समाधान से अलग है, या एरिक (कुछ और साल पहले)? कृपया एक नया पोस्ट करने से पहले प्रदान किए गए समाधान पढ़ें ... - zagrimsan
क्योंकि मैंने तारांकन से पहले बैकस्लैश जोड़ा (जो तारांकन से बचने के लिए है)। मेरे काम पर लिनक्स संस्करण में काम नहीं करता है अगर मैं ऐसा नहीं करता हूं। - Francisco M
इसके अलावा रिक एहर्रेट (2014) और एरिक (2012) ने एक ही समाधान (तारांकन से बचने के लिए) पोस्ट किया। समाधान के साथ कुछ भी गलत नहीं है, लेकिन एक ही समय को पोस्ट करना तब तक समझ में नहीं आता है जब तक कोई समाधान समाधान में गहराई से जोड़ नहीं लेता है। इस तरह के एक साधारण मामले में, और अधिक समझाया जा सकता है। कृपया इसे व्यक्तिगत रूप से न लें, मेरा एकमात्र इरादा एसयू को साफ और संक्षिप्त रखने में मदद करना है ताकि उपयोगकर्ताओं को कम से कम प्रयास के साथ सबसे अच्छा समाधान मिल सके। - zagrimsan