2013-03-20 7 views
16

मैं node.js. के ज़्लिब में डाइविंग कर रहा हूं। मैं प्रदान किए गए उदाहरणों (http://nodejs.org/api/zlib.html#zlib_examples) का उपयोग कर फ़ाइलों को संपीड़ित और असम्पीडित करने में सक्षम था, लेकिन मैं फ़ोल्डर के लिए ऐसा करने में अधिक सक्षम नहीं था?नोड.जेएस - ज़िप/एक फ़ोल्डर को अनजिप करें

एक संभावना (लेकिन जिसे मैं टिंकरिंग के रूप में मानता हूं) node-zip मॉड्यूल का उपयोग करना और फ़ोल्डर की सभी फ़ाइलों को एक-एक करके जोड़ना है। लेकिन असम्पीडित होने पर मुझे एक समस्या का सामना करना पड़ेगा (मैं इस मामले में फ़ोल्डरों को खो दूंगा)।

किसी भी विचार को Node.js का उपयोग करके एक संपूर्ण फ़ोल्डर (उप-सैनिक पदानुक्रम का सम्मान) को संपीड़ित करने (और फिर असम्पीडित) करने का कोई विचार है?

धन्यवाद।

+1

ज़्लिब बस संपीड़न है, आप एक फ़ोल्डर को टैर करना चाहते हैं, फिर इसे संक्षिप्त करें, पूरी tar.gz बात करें, https://github.com/isaacs/node-tar – generalhenry

+0

कोशिश करें ओह, मैं समझता हूं! इसलिए, मुझे इसे दो चरणों में करने की ज़रूरत है: 1/फ़ोल्डर को '.tar' फ़ाइल में कनवर्ट करें, फिर 2/'.tar' फ़ाइल को Zlib का उपयोग करके' .tar.gz' में संपीड़ित करें। 'नोड-टैर' मॉड्यूल बहुत अच्छी तरह से प्रलेखित नहीं है, क्या आपके पास कोई अतिरिक्त संसाधन है? – htaidirt

+1

मैंने एक नज़र डाली, मैंने पाया कि सबसे अच्छा है https://github.com/cthackers/adm-zip – generalhenry

उत्तर

25

मैं अंत में यह रूप में टिप्पणी में उल्लेख किया गया है, @generalhenry की मदद (प्रश्न पर टिप्पणी देखें) और

के साथ, हम दो चरणों में फ़ोल्डर सेक की जरूरत है:

  1. एक .tar फ़ाइल में फ़ोल्डर में कनवर्ट

  2. संक्षिप्त .tar फ़ाइल

क्रम में पहला कदम प्रदर्शन करने के लिए, मैं दो Node.js मॉड्यूल की जरूरत:

npm install tar 
npm install fstream 

पहले एक हमें .tar फ़ाइलें बनाने के लिए अनुमति देता है। आप यहां स्रोत कोड तक पहुंच सकते हैं https://github.com/isaacs/node-tar

दूसरा नोड मॉड्यूल हमें एक फ़ोल्डर पढ़ने और फ़ाइल लिखने में मदद करेगा। मूल fs node.js मॉड्यूल के बारे में, मुझे नहीं पता कि निर्देशिका को पढ़ना संभव है (मैं fs.readdir का उपयोग करके, किसी सरणी में सभी फ़ाइलों को प्राप्त करने के बारे में बात नहीं कर रहा हूं, लेकिन सभी फ़ाइलों और उनके संगठन को फ़ोल्डर्स में संभालना)।

फिर, जब मैं फ़ोल्डर को .tar फ़ाइल में परिवर्तित करता हूं, तो मैं इसे Gzip()Zlib का उपयोग कर संकुचित कर सकता हूं। ,

  • आप देख सकते हैं वहाँ:

    var fstream = require('fstream'), 
        tar = require('tar'), 
        zlib = require('zlib'); 
    
    fstream.Reader({ 'path': 'path/to/my/dir/', 'type': 'Directory' }) /* Read the source directory */ 
    .pipe(tar.Pack()) /* Convert the directory to a .tar file */ 
    .pipe(zlib.Gzip()) /* Compress the .tar file */ 
    .pipe(fstream.Writer({ 'path': 'compressed_folder.tar.gz' })); /* Give the output file name */ 
    

    इससे मुझे Node.js

    2 अधिक चीजों का उपयोग कर एक संपूर्ण फ़ोल्डर संपीड़ित करने के लिए:

    यहाँ अंतिम कोड है tar मॉड्यूल पर दस्तावेज़ीकरण की कमी है। मुझे उम्मीद है कि यह दो उदाहरणों के बाद जल्द ही सुधार होगा क्योंकि .tar फ़ाइल से सामग्री निकालने के तरीके के बारे में बात की गई थी।

  • मैंने स्रोत निर्देशिका को संभालने में मेरी सहायता के लिए fstream मॉड्यूल का उपयोग किया। क्या इसे fs का उपयोग करके बाईपास किया जा सकता है? मुझे नहीं पता (कृपया, अगर आपको कोई विचार है तो टिप्पणी करें)।

3

आप टैर संग्रह बनाने के लिए tar-stream मॉड्यूल का उपयोग कर सकते हैं।इसकी और अधिक लचीला और उस में नोड राल से अधिक आसान:

  • आप संग्रह (न सिर्फ निर्देशिका, जो नोड टार की एक सीमा है)
  • यह सामान्य नोड फाइल सिस्टम धाराओं के साथ काम करता है के लिए फ़ाइलों को जोड़ सकते हैं
  • इसकी सुंदर पूरी तरह से प्रलेखित (नोड टार अच्छी तरह से प्रलेखित नहीं है)
  • आप फाइल सिस्टम से टकराने के बिना एक संग्रह बना सकते

बनाएँ (नोड टार अजीब fstream मॉड्यूल के उपयोग की आवश्यकता) टार संग्रह, फिर zlib का उपयोग करके इसे संपीड़ित करें, फिर जहां चाहें इसे लिखें (नेटवर्क, फाइल सिस्टम, आदि)।

+0

क्या आप टैर-स्ट्रीम कहां कह सकते हैं/दिखाता है कि यह नोड फाइल सिस्टम ('एफएस') धाराओं का उपयोग कर सकता है। मुझे कोई नहीं लगता है। –

+0

मैं इस बिंदु पर इस मॉड्यूल के साथ अभ्यास से बाहर हूं। शायद यह मदद करेगा? https://github.com/mafintosh/tar-stream/issues/8 –

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