ज़िप फ़ाइल बनाएँ और निर्देशिका संरचना को अनदेखा करें


217

मुझे इस कमांड का उपयोग करके ज़िप फ़ाइल बनाने की आवश्यकता है:

zip /dir/to/file/newZip /data/to/zip/data.txt

यह काम करता है, लेकिन बनाई गई ज़िप फ़ाइल निर्देशिका संरचना को कच्चे फ़ाइल में नकल करती है। यह बहुत सारे अतिरिक्त फ़ोल्डर हैं जिनकी मुझे आवश्यकता नहीं है।

मुझे मैन पेज या गूगल हंट पर सरसरी नज़र में जवाब नहीं मिला।



2
मैं सोच रहा था कि यह सवाल उन सभी अन्य स्टैक एक्सचेंजों से पहले था, लेकिन अफसोस सुपरयुजर का पद वास्तव में इस एक से पुराना है। अगर वहाँ कुछ है मैं यहाँ मदद कर सकता है मुझे बताएं। यह काफी गर्म उत्तर होना चाहिए क्योंकि Google अभी भी यहाँ बहुत अधिक ट्रैफ़िक चलाता है। : D
Jake

जवाबों:


352

आप उपयोग कर सकते हैं -j

-j
--junk-paths
          Store just the name of a saved file (junk the path), and do  not
          store  directory names. By default, zip will store the full path
          (relative to the current directory).

19
यदि -jआपकी निर्देशिका के लिए (साथ में -r) इस उत्तर को
czerasz

कभी-कभी यह काम नहीं करता है ... पसंद करें @czerasz लिंक;) जो मूल रूप से एक
पुशड

36

उपयोग करना विकल्प -jके साथ काम नहीं करेगा -r
तो इसके लिए काम के आसपास यह हो सकता है:

cd path/to/parent/dir/;
zip -r complete/path/to/name.zip ./* ;
cd -;

या इन-लाइन संस्करण

cd path/to/parent/dir/ && zip -r complete/path/to/name.zip ./* && cd -

/dev/nullयदि आप cd -आउटपुट को स्क्रीन पर दिखाना नहीं चाहते हैं तो आप आउटपुट को डायरेक्ट कर सकते हैं


वास्तव में, आप निम्नलिखित कार्य कर सकते हैं:cd path/to/parent/dir/ && zip -r ../../../../name.zip ./* && cd -
eddyP23

@ eddyP23 इससे कोई अंतर कैसे पड़ता है? बल्कि यह आप को जोड़ने के लिए कारण होगा। in पथप्रदर्शक (..) पथ में प्रत्येक निर्देशिका के लिए: |
विकास तानिया

परिणाम वही है, मैं सहमत हूं। लेकिन कई अलग-अलग परिवेशों में चलने वाली स्वचालित लिपियों में, आप आमतौर पर वैश्विक रास्तों से बचते हैं, क्योंकि आपको पता नहीं है कि वैश्विक मार्ग क्या होगा। लेकिन cd path/to/parent/dir/आप ../आसानी से डबल डॉट्स की संख्या की गणना कर सकते हैं।
eddyP23

@ eddyP23 समझ में आता है
विकास तौनिया

33

-jविकल्प का उपयोग करें :

   -j     Store  just the name of a saved file (junk the path), and do not
          store directory names. By default, zip will store the full  path
          (relative to the current path).

18

कुछ हद तक संबंधित - मैं निर्देशिका के लिए भी ऐसा करने के लिए एक समाधान की तलाश में था। दुर्भाग्य से -jविकल्प इसके लिए काम नहीं करता है :(

यहाँ एक अच्छा समाधान है कि इसे कैसे किया जाए: /superuser/119649/avoid-unwanted-path-in-zip-file


3

वैकल्पिक रूप से, आप अपनी फ़ाइल के लिए एक अस्थायी प्रतीकात्मक लिंक बना सकते हैं:

ln -s /data/to/zip/data.txt data.txt
zip /dir/to/file/newZip !$
rm !$

यह एक डायरेक्टरी के लिए भी काम करता है।


1

मूल निर्देशिका को unzipपुनःप्राप्त करें ताकि हर जगह फाइलें न उगलें

निर्देशिकाओं को ज़िप करते समय, संग्रह में मूल निर्देशिका को रखने से आपको अपनी वर्तमान निर्देशिका को लेटाने से बचने में मदद मिलेगी जब आप बाद में संग्रह फ़ाइल को खोल देते हैं

इसलिए सभी रास्तों को बनाए रखने से बचने के लिए, और चूंकि आप -j और -r का एक साथ उपयोग नहीं कर सकते हैं (आपको एक त्रुटि मिलेगी), आप इसके बजाय यह कर सकते हैं:

cd path/to/parent/dir/;
zip -r ../my.zip ../$(basename $PWD)
cd -;

../$(basename $PWD)जादू है कि मूल निर्देशिका को बरकरार रखे हुए है।

तो अब unzip my.zipआपकी सभी फाइलों से युक्त एक फोल्डर देगा:

parent-directory
├── file1
├── file2
├── dir1
│   ├── file3
│   ├── file4

वर्तमान निर्देशिका को अनजिप की गई फ़ाइलों के साथ रखने के बजाय:

file1
file2
dir1
├── file3
├── file4

0

बस -jrmफ़ाइल और निर्देशिका संरचनाओं को हटाने के लिए विकल्प का उपयोग करें

zip -jrm /path/to/file.zip /path/to/file

carefull; -m --move निर्दिष्ट फ़ाइलों को ज़िप संग्रह में ले जाएं; वास्तव में, यह निर्दिष्ट ज़िप संग्रह बनाने के बाद लक्ष्य निर्देशिकाओं / फ़ाइलों को हटा देता है। यदि फ़ाइलों को हटाने के बाद कोई निर्देशिका खाली हो जाती है, तो निर्देशिका भी हटा दी जाती है। जब तक ज़िप में त्रुटि के बिना संग्रह नहीं बनाया जाता है तब तक कोई विलोपन नहीं किया जाता है। यह डिस्क स्थान के संरक्षण के लिए उपयोगी है, लेकिन संभावित रूप से खतरनाक है इसलिए सभी इनपुट फ़ाइलों को हटाने से पहले संग्रह का परीक्षण करने के लिए -T के साथ संयोजन में इसका उपयोग करने की सिफारिश की जाती है।
14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.