2010-03-04 14 views
12

के लिए इनपुट के रूप में एक पाइप का उपयोग करें, मैं उबंटू सर्वर एलटीएस पर टैर + पाइप का उपयोग करने का एक तरीका जानने का प्रयास कर रहा हूं।शेल-स्क्रिप्टिंग: टैर

मैं एक PostgreSQL आदेश (pg_dump) कि मानक आउटपुट पर एसक्यूएल के बहुत सारे आउटपुट मिल गया है:

pg_dump -U myUser myDB 

मैं जानता हूँ कि एक फाइल करने के लिए कि रीडायरेक्ट करने के लिए कैसे:

pg_dump -U myUser myDB > myDB.sql 

आदेश में कुछ डिस्क स्थान को सहेजने के लिए, मैं इसे संपीड़ित कर दूंगा: मैं उस my.gB.sql से tar.gz फ़ाइल कर सकता हूं, और फिर myDB.sql को हटा सकता हूं।

लेकिन मैं सोच रहा था - क्या मध्यवर्ती .sql फ़ाइल बनाने के बिना ऐसा करने का कोई तरीका है? मेरा मानना ​​है कि यह पाइप के साथ पूरा किया जा सकता है ... हालांकि मैं कोई शेल गुरु नहीं हूं, और उनके बारे में बहुत कम जानता हूं (मैं ls | more करने में सक्षम हूं, यह सब कुछ है)। मैंने pg_dump .. | tar ... के कई बदलावों की कोशिश की है लेकिन बिना किसी सफलता के।

pg_dump के आउटपुट का उपयोग टैर के इनपुट के रूप में करने के लिए मैं पाइप का उपयोग कैसे कर सकता हूं? या क्या मुझे कुछ गलत मिला?

उत्तर

29

मुझे नहीं लगता कि इसमें "टैर" आंकड़े बिल्कुल कैसे हैं; क्यों न केवल डंप फ़ाइल को संपीड़ित करें?

pg_dump -U myUser myDB | gzip > myDB.sql.gz 

फिर, बहाल करने के लिए:

gzip -cd myDB.sql.gz | pg_restore ... 

"टार" उपयोगिता एक एकल फाइल में फ़ाइलों और निर्देशिकाओं का एक समूह अप bundling के लिए है (नाम की "टेप संग्रह" एक संकुचन है) । उस संबंध में, एक "टैर" फ़ाइल एक "ज़िप" फ़ाइल की तरह है, सिवाय इसके कि "ज़िप" हमेशा "tar" नहीं होने पर संपीड़न का तात्पर्य है।

नोट अंततः "gzip" "ज़िप" नहीं है। "Gzip" उपयोगिता बस संपीड़ित; यह अभिलेखागार नहीं बनाता है।

+0

या 'zcat myDB.sql.gz | pg_restore ...' – vezult

+0

धन्यवाद! बहुत ही जानकारीपूर्ण जवाब! – kikito

+3

http://www.postgresql.org/docs/9.1/static/backup-dump.html यह दस्तावेज़ आपको इस विषय पर कुल अवलोकन देगा –

2

tar सेक नहीं करता है, क्या आप चाहते हैं gzip है या एक similat संपीड़न उपकरण

2

राल इनपुट के रूप में फ़ाइल नाम लेता है। आप शायद सिर्फ इसलिए की तरह pg_dump उत्पादन gzip हैं:

pg_dump -U myUser myDB |gzip > myDB.sql.gz 
7

आपके उपयोग के मामले pg_dump में जो संकुचित होने की जरूरत है केवल एक ही फ़ाइल बनाता है। जैसा कि अन्य ने संकेत दिया है, * निक्स भूमि में एक संग्रह एक फाइल सिस्टम का प्रतिनिधित्व करने वाली एक फ़ाइल है। की यूनिक्स विचारधारा को ध्यान में रखते हुए प्रति कार्य एक उपकरण, संपीड़न संग्रह से अलग कार्य है। चूंकि एक संग्रह एक फ़ाइल है, इसलिए इसे संपीड़ित किया जा सकता है, जैसा कि कोई अन्य फ़ाइल हो सकता है। इसलिए, चूंकि आपको केवल एक फ़ाइल को संपीड़ित करने की आवश्यकता है, इसलिए टैर आवश्यक नहीं है क्योंकि अन्य पहले से ही सही ढंग से इंगित हुए हैं।

हालांकि, अपने शीर्षक और टैग भविष्य पाठकों यहाँ जो निम्नलिखित की उम्मीद की जा सकती है लाना होगा ...


मान लीजिए कि आप को संग्रहीत और संपीड़ित करने के लिए PostgreSQL बैकअप से भरा एक पूरी फ़ोल्डर करते हैं। यह अभी भी पूरी तरह से टैर का उपयोग करके किया जाना चाहिए, क्योंकि इसकी -z या --gzip ध्वज invokes the gzip tool है।

तो मान लें कि आपको अपने डेटाबेस अभिलेखागार को एक संदिग्ध सुरक्षित ऑफ़साइट बैकअप समाधान (जैसे एक एस 3-संगत ऑब्जेक्ट स्टोर) में स्थानांतरित करने के लिए तैयारी में एन्क्रिप्ट करना होगा। और आइए आपको एईएस सिफर का उपयोग करके पूर्व-साझा टोकन (पासवर्ड) एन्क्रिप्शन की तरह मान लें।

यह एक वैध स्थिति होगी जहां आप टैर से डेटा को पाइप करना चाहेंगे।

पुरालेख -> कम्प्रेस -> एन्क्रिप्ट

tar cz folder_to_encrypt | openssl enc -aes-256-cbc -e > out.tar.gz.enc 

डिक्रिप्ट -> Uncompress -> निकालें

openssl enc -aes-256-cbc -in ./out.tar.gz.enc -d | tar xz --null 

GNU tar documentationdetails of how के लिए --null झंडा काम करता है और अन्य स्थितियों के लिए अधिक उपयोगी उदाहरण को देखें Do जहां आपको टैर करने के लिए फ़ाइलों को पाइप करने की आवश्यकता हो सकती है।

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