टार रिवर्स '--कमांड', या: व्यक्तिगत रूप से टार प्रविष्टियों को संपीड़ित करना, या: बड़ी फ़ाइलों के साथ टार


2

मैं टार गज़िप आर्काइव बनाना चाहूंगा, लेकिन इसका उल्टा तरीका यह है कि जो सबसे अधिक किया जाता है - क्या पुरालेख में फ़ाइलों को व्यक्तिगत रूप से पूरे संग्रह को संपीड़ित करने के बजाय संपीड़ित किया जाना चाहिए: इस तरह यह उस प्राप्य संपत्ति को बनाए रखता है जो उसके पास होनी चाहिए। यह मेरे लिए बहुत अधिक समझ में आता है, और मुझे नहीं पता कि यह क्यों इष्ट नहीं है।

मुझे यह करने के बारे में कुछ विचार हैं:

हालांकि, आदर्श रूप से, मैं इसके लिए टार का उपयोग करना जारी रखना चाहूंगा, क्योंकि यह संग्रह करने के लिए एक परिचित, वास्तविक तथ्य है जहां मैं काम करता हूं। टार में --to-commandस्विच है, जो पाइपिंग एक्सट्रैक्टेड फ़ाइलों को प्रोग्राम में रखने की अनुमति देता है। अगर मेरे पास एक सममित आदेश होता, जैसे कि --from-commandमैं अपनी इच्छा को आसानी से लागू करता:

tar cf my_archive.tar file1 file2 --from-command=gzip
tar xf my_archive.tar --to-command=gunzip

मेरी प्रेरणा अभिलेखागार से निपटने के लिए आती है जिसमें बड़ी संख्या में बड़ी फाइलें होती हैं। मैं वर्तमान में उन्हें टार्-गिप करता हूं, लेकिन फिर संग्रह से किसी भी फाइल को निकालने में लंबा समय लगता है - यह टार फाइल को एक्सेस करने से पहले विघटित होने की जरूरत है, और यह क्रमबद्ध तरीके से ऐसा करता है!

तो यहाँ मेरे सवाल हैं:

  • क्या इसे प्राप्त करने का एक स्पष्ट तरीका है कि मैं अवहेलना कर रहा हूं?
  • क्या किसी ने पहले से ही विशेष रूप से के साथ करने के लिए एक उपकरण लिखा है tar?
  • यदि एक कहेंगे tarऔर gzipऔर संग्रह के मानक तरीकों और लिनक्स में संपीड़ित करने, क्या बराबर है, ढंग के बारे में मैं उल्लेख में संपीड़न के साथ संग्रह करने के लिए लोकप्रिय तरीका होगा (यानी नहीं tar.gz )
  • वहाँ एक और तरीका है कि मैं एक बड़े टार-गेज्ड आर्काइव से फ़ाइल निकालने में लगने वाले समय की बड़ी मात्रा को दरकिनार करने के लिए अनदेखी कर रहा हूं?

धन्यवाद!

संपादित करें

मुझे एहसास है कि मुझे अपने प्रश्न को फिर से वाक्यांश और परिष्कृत करने की आवश्यकता है। विशेष रूप से तब से, जैसा कि रॉबिन हुड ने बताया, संपीड़ित अभिलेखागार (अर्थात् zip) बनाने के लिए मौजूदा आसान समाधान मौजूद हैं । तो यहाँ है:

क्या इसका उपयोग करने का कोई तरीका है tarजो इसे अभी भी संकुचित रखते हुए संग्रह में सही यादृच्छिक-अभिगम की अनुमति देता है? यदि नहीं, तो क्या tarलिनक्स के लिए एक और -सुधार है (जो एक ही तर्क के साथ बनाया गया है, और, आदर्श रूप से, एक ही कमांड-लाइन विकल्पों के समर्थन के साथ), जो इसे प्राप्त करता है?

अभी मैं बदलकर, tarसामान्य अर्थों में प्रतिस्थापित कर सकता हूं zip:

tar c path/to/file1 path/to/file2 | gzip > arc.tar.gz
gunzip < arc.tar.gz | tar x

सेवा मेरे:

zip -qr - path/to/file1 path/to/file2 > arc.zip
unzip -qoX test.zip

हालाँकि, इसका नुकसान यह है कि यह उन सभी विकल्पों का समर्थन नहीं tarकरता है, जो संग्रह करने के लिए करता है, अर्थात्:

  1. प्रत्येक निकाले गए फ़ाइल को अलग-अलग पाइप में --to-commandस्विच करना ( स्विच)
  2. unzipमानक इनपुट में एक संग्रह को स्वीकार नहीं करता है। funzipहालांकि, यह केवल संग्रह में पहली फ़ाइल को आउटपुट करता है

इसलिए यह सीमित है।

एक बार फिर धन्यवाद!


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

तब फिर से, यह उपयोगकर्ता को संपीड़न दक्षता और पहुंच दक्षता के बीच चयन करने का विकल्प देने के लिए समझदार लगता है। मुझे लगता है कि यह समझ में आता है क्योंकि tarटेप के साथ उपयोग करने का इरादा था - हालांकि यह अभी भी खोज योग्य अभिलेखागार का समर्थन करता है!
युवल

जवाबों:


1

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

एक टार के अंदर फ़ाइलों को संपीड़ित करने के बाद भी gz अभिलेखागार की क्रमिक पहुंच होगी, क्योंकि टार प्रारूप यादृच्छिक अभिगम का समर्थन नहीं करता है। जिप अभिलेखागार एक केंद्रीकृत कैटलॉग का उपयोग करते हैं इसलिए डिकम्प्रेसिंग, या पूरे संग्रह को पढ़ने के बिना यादृच्छिक फ़ाइल पहुंच संभव है। मैं लिनक्स के तहत बहुत संग्रह नहीं करता, लेकिन विंडोज पर मुझे 7-ज़िप का उपयोग करना पसंद है, लज़मा संपीड़न के साथ ज़िप अभिलेखागार बनाने के लिए। यह ध्यान देने योग्य है कि इनमें से कोई भी तरीका जब आपके tar.gz के तुलनीय संपीड़न के साथ उपयोग किया जाता है, तो ठोस संपीड़न की कमी के कारण एक बड़े संग्रह को हल करेगा, यही कारण है कि सॉफ्टवेयर वितरण के लिए ज़िप की तुलना में linux दुनिया में tar.gz बहुत लोकप्रिय है ।

एक टार पुरालेख में GZ अभिलेखागार और स्टोर की एक श्रृंखला बनाएं:

cp -a -n -v "/ home / me / example / inputfiles /।" --target-निर्देशिका = "/ घर / मुझे / उदाहरण / gzfiles"

यह उन फ़ाइलों को कॉपी कर देगा जिन्हें आप एक अलग फ़ोल्डर में संग्रह करना चाहते हैं। Gunzip मूल अनारक्षित फ़ाइलों को रखने की अनुमति नहीं देता है, लेकिन एक प्रतिलिपि से काम करने से आप इससे बच पाएंगे।

gzip -9 "/ home / me / example / gzfiles / *"

यह प्रत्येक फ़ाइल का एक अलग gz संग्रह बनाएगा, और अधिकतम संपीड़न का उपयोग करेगा। यदि आपका सिस्टम कम संख्या को आज़मा नहीं सकता है; डिफ़ॉल्ट संख्या 6 है।

tar -cf "/home/me/example/tar/archive.tar" -C "/ home / me / example / gzfiles।"

यह एक एकल टार आर्काइव बनाएगा जिसमें सभी gz अभिलेखागार होंगे।

टार पुरालेख में एक GZ संग्रह से एक एकल फ़ाइल निकालें:

sudo apt-get install आर्कमाउंट

यह आर्काइव माउंट, एक उपकरण जो एक डायरेक्टरी में टार फाइल को माउंट कर सकता है।

आर्कमाउंट -ओ आसानी से "/ home/me/example/tar/archive.tar" "/ home / me / example / Mount"

यह टार आर्काइव को माउंट करेगा ताकि आप वांछित gz आर्काइव को निकाल सकें। मेरा मानना ​​है कि टार के साथ टार संग्रह से अलग-अलग फ़ाइलों को निकालना संभव है, लेकिन मुझे कमांड नहीं पता है, इसलिए मैं इस दृष्टिकोण का उपयोग कर रहा हूं।

gunzip -c "/home/me/example/mount/example1.txt.gz"> "/home/me/example/extract1/example1.txt"

यह फ़ाइल को निकालेगा। गनज़िप केवल स्रोत निर्देशिका या मानक आउटपुट को निकालने का समर्थन करता है इसलिए इस कमांड में हमने मानक आउटपुट का उपयोग किया है और फिर आउटपुट को एक फ़ाइल में पाइप किया है।

सूद umount "/ घर / मुझे / उदाहरण / आरोह"

यह टार संग्रह को अनमाउंट करेगा।

एक टार पुरालेख में GZ अभिलेखागार की एक श्रृंखला से सभी फाइलें निकालें:

cd "/ home / me / example / extractall"

यह टर्मिनल को उस निर्देशिका में डालता है जिसे आप वर्तमान निर्देशिका में टार के अर्क से निकालना चाहते हैं।

tar -xf /home/me/example/tar/archive.tar

यह gz अभिलेखागार निकालता है।

gunzip * .gz

यह gz अभिलेखागार की सामग्री को वर्तमान निर्देशिका में /home/me/example/extractall/निकालता है और gz अभिलेखागार को हटाता है।

एक ज़िप संग्रह बनाएँ:

सीडी "/ घर / मुझे / उदाहरण / inputfiles"

यह टर्मिनल को इनपुटफाइल्स डायरेक्टरी में डाल देता है क्योंकि ज़िप वर्तमान डायरेक्टरी से एक आर्काइव बनाता है, और इसे सेव करता है।

zip -9 -r inputfiles inputfiles.zip *

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

mv "/home/me/example/inputfiles/inputfiles.zip" "/home/me/example/zip/archive.zip"

यह आपको उस संग्रह का नाम बदलने की अनुमति देगा, जो आप कभी भी चाहते हैं, और इसे जहां चाहें वहां स्थानांतरित कर सकते हैं।

एक ज़िप संग्रह निकालें:

सीडी "/ घर / मुझे / उदाहरण / ज़िप"

यह टर्मिनल को ज़िप युक्त निर्देशिका में डालता है।

अनज़िप-एन आर्काइव.ज़िप

यह ज़िप संग्रह सामग्री को वर्तमान निर्देशिका में निकालता है।


1
आपको जवाब के लिए धन्यवाद। हालाँकि, मैंने आपके उत्तर के दो पहले पैराग्राफ से परे, दो कारणों से नहीं पढ़ा। पहले, आपने मेरे प्रश्न को ठीक से नहीं समझा: मैंने पूछा कि क्या tarउन्हें संग्रह में जोड़ते समय फ़ाइलों को संपीड़ित करने की क्षमता है। दूसरा, आपने गलत तरीके से लिखा है जो tarयादृच्छिक अभिगम का समर्थन नहीं करता है: --seekविकल्प देखें ।
युवल

1
लंबा स्पष्टीकरण के लिए पुनश्च धन्यवाद। zipमैं जो खोज रहा हूं, उसके लिए एक उत्कृष्ट विकल्प है और मैं इसका उपयोग कर सकता हूं। गज़िप-संपीड़ित tarसंग्रह के लिए एक एकल फ़ाइल निकालने के संबंध में , कमांड होगा:tar xfz archive.tgz path/in/archive/to/file
युवल

@ युवल seek, टार प्रोग्राम की एक ऐसी क्षमता है जिसका उपयोग आर्कटिक फॉर्मेट के साथ किया जाता है जो रैंडम एक्सेस को सपोर्ट करता है, टार्क आर्काइव फॉर्मेट खुद रैंडम एक्सेस के लिए डिज़ाइन नहीं किया गया है। ( en.wikipedia.org/wiki/Tar_%28computing%29#Random_access ) ( डुप्लिकेट .nongnu.org/new_format.html#nottar ) एक टार से व्यक्तिगत फ़ाइलों को निकालना संभव है, लेकिन इसके लिए पहले पूरे संग्रह को स्कैन करने की आवश्यकता होती है उन्हें ढूंढिए क्योंकि कोई केंद्रीय कैटलॉग नहीं है। ( arstechnica.com/civis/viewtopic.php?f=16&t=409016 )
रॉबिन हुड

1

यदि आप चाहते हैं कि रैंडम एक्सेस के साथ एक संग्रह में व्यक्तिगत रूप से संपीड़ित फाइलें हैं, तो डार ("डिस्क आर्किव") वह हो सकता है जिसे आप ढूंढ रहे हैं। नए संस्करण LZMA संपीड़न, 7-ज़िप द्वारा उपयोग किए गए एल्गोरिदम का समर्थन करते हैं। कुछ फ़ाइल प्रकारों को असम्पीडित करने और समय बचाने के लिए फ़िल्टर्स को परिभाषित करना भी संभव है, उदाहरण के लिए मीडिया फाइलें और अभिलेखागार जो पहले से ही अपने स्वयं के संपीड़न हैं। मेरी पसंदीदा विशेषता मौजूदा (असम्पीडित) अभिलेखागार को संपीड़ित कर रही है ताकि मैं जल्दी से अब बैकअप बना सकूं और अधिक सुविधाजनक समय पर या अधिक शक्तिशाली मशीन पर सीपीयू गहन LZMA संपीड़न चला सकूं:

dar --empty-dir \
  --fs-root /home \
  --create home-backup-2016-01-11 \
  --prune lost+found

और फिर बाद में और / या कहीं और:

dar -+ home-backup-2016-01-11-compressed-encrypted \
  -A home-backup-2016-01-11 \
  -zxz:6 \
  -K "aes:" \
  -an -ag -Z "*.mpg" -Z "*.avi" -Z "*.flac" -Z "*.cr2" \
  -Z "*.vob" -Z "*.jpg" -Z "*.jpeg" -Z "*.mpeg" -Z "*.png" \
  -Z "*.mp3" -Z "*.ogg" -Z "*.deb" -Z "*.tgz" -Z "*.tbz2" \
  -Z "*.rpm" -Z "*.xpi" -Z "*.run" -Z "*.sis" -Z "*.gz" \
  -Z "*.Z" -Z "*.bz2" -Z "*.zip" -Z "*.jar" -Z "*.rar" \
  -Z "*.xz" -Z "*.dar" -Z "*.7z" -acase

जैसा कि ऊपर दिखाया गया है, एन्क्रिप्शन भी संभव है, सभी अभी भी व्यक्तिगत फ़ाइलों के निष्कर्षण की अनुमति देते हैं। हालाँकि, ऐसा लगता नहीं है कि डार के बराबर है --to-command। अपने प्रश्न से यह बताना मुश्किल है कि क्या आपने उस सुविधा का उपयोग किसी भी चीज़ के लिए किया है, लेकिन विघटन।

(हां, मुझे पता है कि यह सवाल पुराना है। यह उन लोगों के लिए है, जिन्होंने मुझे पसंद किया, "व्यक्तिगत रूप से टार कम्प्रेस" किया और इसे पहला परिणाम मिला। "

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