यदि आप 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प्रतीकात्मक लिंक को संग्रहीत नहीं करता है।
-jलागू होगा, और यह सभी फ़ोल्डरों को ज़िप के भीतर एक ही रूट-स्तरीय निर्देशिका में संपीड़ित करेगा। यह वह नहीं है जो आप ढूंढ रहे हैं, क्या यह है?