कार्यशील निर्देशिका बदलें


13

मैं एक निर्देशिका को संक्षिप्त करने की कोशिश कर रहा हूं

/home/cyrus/sql

और मैं फ़ोल्डर को ज़िप करते समय कार्यशील निर्देशिका को बदलना चाहता था:

/ $ zip -b /home/cyrus sql.zip /home/cyrus/sql

लेकिन जब मैं ज़िप फ़ाइल की जाँच करता हूँ:

/ $ unzip -l sql.zip

Archive:  sql.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-05-30 10:59   home/cyrus/sql/
  1776642  2013-05-23 10:22   home/cyrus/sql/wordpress.sql
---------                     -------
  1776642                     2 files

रूट फोल्डर होना चाहिए था sql। मैंने क्या गल्त किया है?

जवाबों:


10

से man zip:

-b path

 --temp-path path

अस्थायी ज़िप संग्रह के लिए निर्दिष्ट पथ का उपयोग करें। उदाहरण के लिए:

zip -b /tmp stuff *

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

डिफ़ॉल्ट रूप zipसे वर्तमान निर्देशिका के सापेक्ष पूर्ण पथ संग्रहीत करता है। यदि आप चाहते हैं कि आपकी जिपफाइल आपकी sqlनिर्देशिका को जड़ के रूप में रखे, तो आपको /home/cyrusनिर्देशिका से कमांड को चलाना होगा ।


14

यदि आप zipकिसी दी गई निर्देशिका की सामग्री चाहते हैं और zipफ़ाइल को वर्तमान निर्देशिका में संग्रहीत करते हैं , तो आप इसे लिख सकते हैं:

(cd /some/dir && zip -r - dir-there) > file.zip

5

-bनिर्दिष्ट करता है कि zipअस्थायी फ़ाइलों को कहाँ रखा जाना चाहिए, न कि यह निर्देशिका को कहीं बदलना चाहिए। से man zip:

 -b path
      Use the specified path for the temporary  zip  archive.

इसे इस्तेमाल करे:

cd /home/cyrus && zip sql.zip sql

या cd /home/cyrus && zip /sql.zip sqlयदि आप चाहते हैं कि जिप फाइल रूट में बनाई जाए।
ट्रिपलआई

2

यकीन नहीं है कि अगर मैं इसे सही समझता हूं, लेकिन बी रूट फ़ोल्डर को नहीं बदलेगा। यह निर्देशिका / घर / क्रायस में अस्थायी ज़िप संग्रह डाल दिया जाएगा, जब वर्तमान निर्देशिका के लिए sql.zip पर नकल। मौजूदा संग्रह को अपडेट करते समय यह विकल्प केवल उपयोगी है, और इस पुराने संग्रह वाले फ़ाइल सिस्टम में एक ही समय में पुराने और नए दोनों अभिलेखों को रखने के लिए पर्याप्त स्थान नहीं है।

उपयोग करने का प्रयास करें:

-j स्टोर केवल एक सहेजे गए फ़ाइल का नाम (पथ रद्दी), और निर्देशिका नामों को संग्रहीत न करें। डिफ़ॉल्ट रूप से, ज़िप पूरा पथ (वर्तमान पथ के सापेक्ष) संग्रहीत करेगा।


1
-jसही नहीं हो सकता है; मुझे लगता है कि ओपी सापेक्ष रास्ते रखना चाहता है, सभी रास्ते नहीं हटाएगा।
ट्रिपलआई

2

स्टीफन के जवाब से प्रेरित:

(cd /home/cyrus; zip -r sql.zip sql;)

परिणाम:

  1. आपके पास एक sql.zip / घर / साइरस /
  2. sql.zip में sql / निर्देशिका और इसकी सभी सामग्री सम्‍मिलित है
  3. आप प्रारंभिक पीडब्ल्यूडी नहीं बदलते हैं

4
यह कैसे बेहतर है?
स्टीफन राउच

0

वर्तमान निर्देशिका में आप जिस फ़ोल्डर को ज़िप करने का प्रयास कर रहे हैं, उसके लिए सहानुभूति रखना आसान हो सकता है। इस तरह आप जहां हैं वहीं रह सकते हैं।

ln -s /path/to/whatever .
zip -r myzip whatever

यदि आप चाहें तो उन्हें सिम्लिंक rm है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.