Linux - क्या .bz2 फ़ाइलों को .tar.bz2 फ़ाइलों को पाइपों में बदलने का एक तरीका है?


5

वहाँ एक .bz2 फ़ाइल को एक .tar.bz2 फ़ाइल में बदलने के लिए एक पूरी तरह से डिस्क को फिर से decompressing बिना और फिर से compressing है? विघटित आकार मेरे ड्राइव से बड़ा है। चूँकि bz2 ब्लॉकों पर काम करता है, ऐसा लगेगा जैसे आप किसी ब्लॉक को डिकम्पोज कर सकते हैं, इसे पाइप कर सकते हैं, इसे फिर से कंप्रेस कर सकते हैं, मेमोरी से डिकम्प्रेस्ड ब्लॉक को हटा सकते हैं, आदि।

मैंने उबंटू फ़ोरम पर यह पूछा और जवाब नहीं मिला।


4
तुमने ऐसा क्यों करना चाहोगे?
matpie

मूल रूप से यह बहुत बड़ी डेटा फ़ाइलों के साथ काम करने के लिए था बिना उन्हें अनलॉकर किए। आर्कमाउंट आपको .tar.bz2 को माउंट करने देता है (क्योंकि इसके अंदर "फाइलसिस्टम" है), लेकिन .bz2 नहीं।
एंडोलिथ

जवाबों:


3

अपडेट: मेरा मूल उत्तर बिल्कुल काम नहीं करता है, क्षमा करें। tarइनपुट के रूप में STDIN से डेटा स्ट्रीम स्वीकार नहीं करेगा, इसलिए पहला कमांड विफल रहता है।

एकमात्र तरीका मैं यह पूरा करने के बारे में सोच सकता हूं कि आप जो चाहते हैं वह आवश्यक tarहेडर और आपके डेटा स्ट्रीम के आसपास जोड़ने के लिए अपना प्रोग्राम लिखना है। तब आप लिख सकते हैं:

$ bzcat foo.bz2 | stream-to-tar | bzip - > foo.tar.bz2

... और (अपने कार्यक्रम को tarसही स्वरूप मानकर ) आप इसे एक मानक से कम कर सकते हैं tar xf foo.tar.bz2


यह संभवत: यह नहीं है कि आप इसे कैसे करना चाहते हैं, क्योंकि यह फ़ाइल को पहली जगह में टारिंग करने का कोई सामान्य लाभ प्रदान नहीं करता है।

$ bzcat foo.bz2 | tar cjf foo.tar.bz2 -

अब, समस्या यह है कि टार में कोई भी फाइल सिस्टम शामिल नहीं है, क्योंकि हमने जो दिया है वह एक विघटित डेटा स्ट्रीम है। इसका मतलब है कि आपको इसे इस तरह से हटाना / हटाना होगा:

$ tar --to-stdout -xjf foo.tar.bz2 > foo


यह क्या संस्करण है? GNU टार 1.16.1 के साथ काम नहीं करता है।
GoldPseudo

डेब्यू पर जीएनयू टार 1.20, साइबरविन पर 1.21। हम्म। आप सही हैं, पहला कमांड काम नहीं करता है। टार सीज़ tar: -: Cannot stat: No such file or directory। यह STDIN पसंद नहीं है। दूसरा आदेश काम करेगा, पहले वाले ने मान लिया।
क्विकोट

3
tarएसटीडीआईएन से डेटा स्ट्रीम स्वीकार नहीं करता है, यह फाइलों की एक सूची होनी चाहिए।
मैट्री

@ सिर्लांचलोट: सही, thx इसे दर्शाने के लिए मेरा उत्तर निर्धारित किया।
क्विकोट को

0

मुझे लगता है कि आप पाएंगे कि इसका उत्तर है: आप ऐसा नहीं करते हैं। अगर आपने इसे कंप्रेस किया है तो .tbz2फाइल बनाम फाइल से प्राप्त किया गया कंप्रेशन .bz2काफी कम है --best। यहाँ httpd त्रुटि लॉग पर एक उदाहरण दिया गया है:

 39M ./httpd-error.log
904K ./httpd-error.log.bz2
904K ./httpd-error.log.tbz2

अन्यथा, आपको हार्ड ड्राइव द्वारा रोकना होगा।


1
मैं इसे संपीड़न के लिए नहीं कर रहा था। मैं ऐसा इसलिए कर रहा था क्योंकि .tar.bz2 को बिना अनलॉक्ड किए माउंट किया जा सकता है, लेकिन .bz2 नहीं कर सकता। बहुत बड़ी संपीड़ित फ़ाइलों के लिए (OSM नक्शे और विकिपीडिया डंप दोनों ही बहुत बड़ी XML फाइलें हैं, जिन्हें .bz2 के रूप में संग्रहीत किया जाता है, उदाहरण के लिए), आप वास्तव में इसका उपयोग करने के लिए पूरी चीज को अपनी ड्राइव में डिकम्पोज नहीं करना चाहते हैं।
एंडोलिथ

तब मुझे लगता है कि मुझे यह जानना होगा कि आप इस फाइल के साथ क्या करना चाहते हैं? क्या आप एक प्रोग्रामिंग भाषा के साथ पार्स करना चाहते हैं, इसके माध्यम से खोज करते हैं, आदि?
जैक एम।

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