निर्देशिका में सभी फ़ाइलें ज़िप?


482

क्या zipकमांड के साथ दिए गए डायरेक्टरी में सभी फाइलों को ज़िप करने का कोई तरीका है ? मैंने उपयोग करने के बारे में सुना है *.*, लेकिन मैं चाहता हूं कि यह विस्तारविहीन फाइलों के लिए भी काम करे।


2
क्या आपने अपने वांछित निर्देशिका और कर से एक-स्तर को नेविगेट करने की कोशिश की है zip myarch.zip mydir/*?
जोसेफ आर।

13
या इससे बेहतरzip -r myarch.zip mydir/*
एडम

25
या बेहतरzip -r myarch.zip mydir
ctrl-alt-delor-

*.*किसी भी फाइल का मतलब है डॉट। Cp / m और dos में सभी फ़ाइलों में एक बिंदु था, और इसने आपको यह टाइप किया (नहीं कर सका *)। इसलिए लोग *.*सभी फाइलों के रूप में देखने आए । आखिरकार Microsoft ने लंबे-फ़ाइल नाम जोड़े जो शून्य या अधिक डॉट्स हो सकते थे। एक फ़ाइल खोजने के लिए जिसमें आपको विंडोज़ पर एक डॉट है जिसे आपको टाइप करना है *.*.*
ctrl-alt-delor

जवाबों:


704

तुम सिर्फ उपयोग कर सकते हो *; इसकी कोई आवश्यकता नहीं है *.*। फ़ाइल एक्सटेंशन यूनिक्स पर विशेष नहीं हैं। *शून्य या अधिक वर्णों से मेल खाता है - एक बिंदु सहित। तो यह मेल खाता है foo.png, क्योंकि यह शून्य या अधिक वर्ण (सात, सटीक होना) है।

ध्यान दें कि *डिफ़ॉल्ट रूप से एक डॉट (न ही करता है *.*) के साथ शुरू होने वाली फाइलों से मेल नहीं खाता है । यह अक्सर वही होता है जो आप चाहते हैं। यदि नहीं, तो बैश में, यदि आप shopt -s dotglobयह करेंगे (लेकिन फिर भी बाहर कर देंगे .और ..)। अन्य गोले में डॉटफाइल्स सहित अलग-अलग तरीके (या कोई भी नहीं) हैं।

वैकल्पिक रूप से, zipएक -rबार में पूरी निर्देशिका पेड़ों को करने के लिए (पुनरावर्ती) विकल्प भी है (और डॉटफ़ समस्या के बारे में चिंता करने की ज़रूरत नहीं है):

zip -r myfiles.zip mydir

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

आप ज़िप को -j/ --junk-pathsविकल्प के साथ पथों को संग्रहीत नहीं करने के लिए भी कह सकते हैं ।

zipआदेश अपने (कई) विकल्पों में से सभी के बारे में आपको बता रहा प्रलेखन के साथ आता है, man zipउस दस्तावेज को देखने के लिए टाइप करें। यह ज़िप के लिए अद्वितीय नहीं है; आप इस तरह से अधिकांश कमांड के लिए प्रलेखन प्राप्त कर सकते हैं।


9
आप जोड़ना चाह सकते हैं, कि शीर्ष-स्तरीय निर्देशिका में संग्रह में सब कुछ समाहित करने के लिए यह एक अच्छा अभ्यास माना जाता है - ताकि कोई व्यक्ति निष्कर्षण पर अपनी वर्तमान निर्देशिका को प्रदूषित न करे।
पेट्रोफ

@ वेटर्फ़ किया। हालांकि यह उदाहरण के लिए, tarfiles की तुलना में ज़िप फ़ाइलों में एक सम्मेलन कम है, मुझे डर है।
derobert

दुर्भाग्य से हाँ। संभवत: ड्रैग’एनलड्रॉप की खिड़कियों की विरासत के कारण स्रोत कोड के साथ काम करने के लिए डेस्कटॉप और लिनक्स विरासत के लिए।
17

2
ध्यान रखें कि *शेल-ग्लोबिंग में डॉटफाइल्स (यानी। फ़ाइल नाम के साथ शुरुआत .) शामिल नहीं है। यह पूरी निर्देशिका को नाम से जिप करने का एक और फायदा है।
mbb

लेकिन -r का उपयोग करने में निर्देशिका ही शामिल है, जो कि मैं क्या कर रहा हूं, को तोड़ता है। * .और शामिल नहीं होगा ..?
tkbx

11

मेरे मामले में मैं प्रत्येक फ़ाइल को उसके स्वयं के संग्रह में ज़िप करना चाहता था, इसलिए मैंने निम्नलिखित (में zsh) किया:

$ for file in *; do zip ${file%.*}.zip $file; done

1
mkvयहाँ कोई नहीं है? इसके अलावा यहाँ कुछ भी विशेष रूप से zshविशिष्ट नहीं है। आप फ़ाइल चर वाले किसी भी चर को ठीक से उद्धृत करना चाहेंगे, इसलिए zip "${file%.*}.zip" "$file"दोनों चर के आसपास दोहरे उद्धरण चिह्नों के साथ।
ट्रिपलए

1
@ सबसे पहले, मेरे गलत संदर्भ को इंगित करने के लिए धन्यवाद mkv। दूसरे, तर्कों को उद्धृत करना अनावश्यक है zsh, इसके विपरीत bash। इसलिए मैंने निर्दिष्ट किया कि यह एक आदेश था zsh
रेडॉन रोसबोरो

एक एम्परसैंड के साथ अंतिम अर्ध-बृहदान्त्र को बदलने से इसमें काफी तेजी आ सकती है (यदि निर्देशिका में फ़ाइलों की संख्या उचित है ...)। अन्यथा find . -type f -maxdepth 1 -print0|xargs -r0 -n1 -P64 -I{} bash -c 'f="{}"; zip "${f%.*}.zip" "$f"'( -Pआपके CPU थ्रेड्स के आधार पर समायोजित ...) (कई GNU निर्भरताएँ ...)
Gert van den Berg

5

एक और तरीका यह होगा कि आप खोज और xargs का उपयोग करें: (इसमें ज़िप में एक "" निर्देशिका शामिल हो सकती है, लेकिन यह अभी भी सही तरीके से निकाली जा सकती है। मेरे परीक्षण के साथ, ज़िप ने संपीड़न से पहले डॉट को छीन लिया) find . -type f -exec zip zipfile.zip {} +

( यदि आपके संस्करण को निष्पादन के लिए समाप्ति का समर्थन नहीं करता है तो +इसे बदला जा सकता है । यह हालांकि धीमा होगा ...)\;find+

यह डिफ़ॉल्ट रूप से सभी उप-निर्देशिकाओं को शामिल करेगा। GNU पर पा -maxdepthसकते हैं कि रोका जा सकता है।


(उपयोग करने वाले समाधानों के विपरीत *, इसमें डॉटफ़ाइल्स शामिल होंगे और यदि किसी निर्देशिका में बहुत अधिक फाइलें हैं तो वे गिरेंगे नहीं)
गर्ट वैन डेन बर्ग

1

ऐसा करने के लिए एक और (धीमी) विधि (जो एक समय में ज़िप में एक फ़ाइल जोड़ती है):

for f in * .[^.]*; do
    [ -r "$f" ] || continue # Skip directories or non-existant files (Probably ".[^.]*" if directory has no dotfiles). Using -e will allow directories to be used as well
    zip zipfile.zip "$f" # If directories are included, you probably want to add -r
done

इसमें *(वर्कअराउंड जोड़ा गया) के डॉटफ़ाइल मुद्दे हैं और प्रत्येक फ़ाइल के लिए एक बार ज़िप शुरू होगा, इसे संग्रह में जोड़ देगा। में bash, यह बड़ी मात्रा में फाइलों से निपटेगा।

यह अन्य विधियों की तुलना में सबसे धीमा होगा, लेकिन अपेक्षाकृत सरल है।


1
मैं कहूंगा कि यह स्वीकृत उत्तर, और धीमे से कम सरल है, जो इस सवाल का संकेत देता है: "कोई भी ऐसा क्यों करेगा?"। यदि आप उस प्रश्न का उत्तर दे सकते हैं, तो मैं आपको उस संदर्भ को अपने उत्तर में रखने की सलाह देता हूं, अन्यथा मुझे लगता है कि यह एक पुराने प्रश्न का बुरा उत्तर है, जिसका उत्तर पहले से ही अच्छा है।
Centimane

@ केंद्र: मैं सीमाओं को नोट करता हूं। मुझे लगता है कि इसका शैक्षिक मूल्य है। (यदि निर्देशिका को लंघन नहीं है, तो यह काफी सरल है)। यदि आप इसके बजाय (मानक) बाहरी उपकरण का उपयोग करके बहुत तेज़ उत्तर चाहते हैं, तो मेरा अन्य उत्तर कवर करता है। (हटाए गए डॉटफ़ाइल्स को संभालने के साथ (जो प्रश्न में उल्लिखित उनकी अनुपस्थिति के बिना शुद्धता को प्रभावित करता है), मुझे लगता है कि यह काफी सुरुचिपूर्ण है):for f in *; do zip zip.zip "$f"; done
गर्ट वैन डेन बर्ग

1
ध्यान दें कि स्वीकृत उत्तर बाहरी कमांड का उपयोग नहीं करता है और तेज होगा। यह उत्तर किस परिदृश्य में उपयोगी होगा?
Centimane

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