2012-03-14 26 views
15

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

zip -r out.zip /foo/bar/ 

मैं इसे बार के माध्यम से recurse और संरक्षित निर्देशिका संरचना के साथ सभी फ़ाइलों को जोड़ने (जो यह करता है) करना चाहते हैं। हालांकि मैं नहीं चाहता कि बनाई गई ज़िप फ़ाइल में 'foo' शीर्ष स्तर निर्देशिका हो। मैं बार को शीर्ष स्तर की निर्देशिका बनाना चाहता हूं।

क्या इस बारे में जाने का कोई आसान तरीका है? मुझे एहसास है कि समस्या से बचने के लिए मैं ज़िप से पहले निर्देशिका बदल सकता हूं, लेकिन मैं ऐसे समाधान की तलाश में हूं जिसके लिए इसकी आवश्यकता नहीं है।

उत्तर

8

मुझे विश्वास नहीं है कि ज़िप के शीर्ष स्तर की निर्देशिका को बाहर करने का कोई तरीका है। मुझे लगता है कि आपकी सबसे अच्छी शर्त कुछ ऐसा करने के लिए होगी: pushd/foo; zip -r out.zip ./bar; popd;

लेकिन यह वही उत्तर है जो आपने कहा था कि आप नहीं चाहते थे।

+2

मुझे संदेह है कि 'tar -C/foo/bar -c out.tar *' उसे किसी भी खुश बनाता है। –

+1

मैं इसे दूसरा करता हूं। मैं एक मैक पर हूं और ज़िप की आवश्यकता है और tar.gz नहीं। pushd वास्तव में एक अच्छा विकल्प की तरह लगता है। – slott

8

यह करना चाहिए:

cd /foo/bar/ 
zip -r ../out.zip * 

संग्रह में /foo/out.zip

+1

ओपी ने कहा कि वह निर्देशिका बदलना नहीं चाहता है। – Amala

+0

यह उत्तर ठीक वही करता है जो ओपी चाहता है। स्वीकार्य उत्तर होना चाहिए था। – Jason

+0

मैं एक PHP स्क्रिप्ट में ज़िप चला रहा हूँ। अब क्या? –

-1

कोई इस पर लड़खड़ाती है और इसके बाद के संस्करण समाधान से संतुष्ट नहीं है, तो यहां एक बहुत ही सरल इस प्रकार किया जाएगा लंबी उपनिर्देशिका ज़िप नहीं करने के लिए कामकाज। यह अस्थायी रूप से सी में एक फ़ोल्डर बनाने शामिल है: /, और बस ज़िप करने यह हटाने के बाद: तो है

ZipFiles <- list.files(".../ZipFiles") # Insert your long subdirectory into .../ 

dir.create("C:/ZipFiles") 
dir.create(".../FolderToBeZipped") 
file.copy(from = ZipFiles,to = "C:/ZipFiles") 
zip(".../FolderToBeZipped", 
    files = "C:/ZipFiles") 
unlink("C:/ZipFiles",recursive = TRUE) 

परिणाम .../FolderToBeZipped.zip/ZipFiles/

लाभ यह है कि आप नहीं की जरूरत है कोड निष्पादित करते समय उपनिर्देशिका (या प्रोजेक्ट) के भीतर रहें।

संबंधित मुद्दे