मूल निर्देशिका को शामिल किए बिना किसी फ़ाइल को ज़िप करें


12

मेरे पास एक फ़ोल्डर है जिसमें कई फाइलें हैं

फ़ोल्डर

  • artifact1.app
  • artifact2.ext2
  • artifact3.ext3
  • ...

मेरा लक्ष्य इस फ़ोल्डर के बाहर से फ़ाइल को ज़िप करना है (ताकि cdकमांड का उपयोग किए बिना) फ़ोल्डर dir को शामिल किए बिना।

zip -r ./folder/artifact.zip ./folder/artifact1.app

इस कमांड में अंतिम ज़िप में फ़ोल्डर dir शामिल है। कोई संकेत?

संबंधित प्रश्न: एक फ़ोल्डर की सामग्री को बिना फ़ोल्डर के ही शामिल करें


1
मैन पेजों से ऐसा लगता है कि यह केवल -jलागू होगा, और यह सभी फ़ोल्डरों को ज़िप के भीतर एक ही रूट-स्तरीय निर्देशिका में संपीड़ित करेगा। यह वह नहीं है जो आप ढूंढ रहे हैं, क्या यह है?
फेयरफॉक्स 11

@phyrfox शायद हाँ। इसे सत्यापित करने की आवश्यकता है। धन्यवाद।
लोरेंजो बी

जवाबों:


13

यदि आप folderएक निर्देशिका संकेत के बिना उनके नाम के तहत सभी फ़ाइलों को संग्रहीत करना चाहते हैं , तो आप -jविकल्प का उपयोग कर सकते हैं ।

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

या

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

यदि आपके पास उपनिर्देशिकाओं में फाइलें हैं, तो उनके पास संग्रह में कोई निर्देशिका घटक नहीं होगा, जैसे folder/subdir/fooकि संग्रह में संग्रहीत किया जाएगा foo

लेकिन शायद डायरेक्टरी में बदलाव करना आसान होगा। यह लगभग उसी प्रकार की टाइपिंग है जैसे ब्रेस मेथड अबो। यदि आप ऐसा करते हैं, यदि आप उपनिर्देशिकाओं में फ़ाइलों को शामिल करते हैं, तो उनके पास आपके द्वारा बदले गए निर्देशिका से उनका सापेक्ष पथ folder/subdir/fooहोगा , जैसे कि संग्रहीत किया जाएगा subdir/foo

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

इंटरेक्टिव उपयोग के लिए, आप शेल को इस तरह से पूरा करते हैं, क्योंकि शेल को एहसास नहीं होता है कि जब आप zipकमांड चलाते हैं तो आप एक अलग निर्देशिका में होंगे । उपाय करने के लिए, cdअलग से कमांड जारी करें । आसानी से पिछली निर्देशिका में वापस जाने के लिए, आप उपयोग कर सकते हैं pushdऔर popd

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

यदि आप ज़िप फ़ाइल में संग्रहीत रास्तों पर पूर्ण नियंत्रण चाहते हैं, तो आप प्रतीकात्मक लिंक का एक जंगल बना सकते हैं। जब तक अन्यथा निर्देश न दिया जाए, zipप्रतीकात्मक लिंक को संग्रहीत नहीं करता है।


आपको उपनिर्देशिका ( folder) में सभी फाइलों को स्पष्ट रूप से सूचीबद्ध करने की आवश्यकता नहीं है , आप बस एक वाइल्डकार्ड का उपयोग कर सकते हैं, अर्थातzip -j folder/*
जकुब कुकुल

शेल विस्तार पर निर्भर होने का मतलब है कि संग्रह में डॉटफ़ाइल्स (जैसे .profile) शामिल नहीं होंगे। इसके बजाय, वर्तमान कार्यशील निर्देशिका को बदलें और .संग्रहीत की जाने वाली फ़ाइल के रूप में निर्दिष्ट करें :cd folder && zip -r ../folder.zip .
sheldonh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.