एक बड़ी टैरबॉल से फ़ाइलों की केवल एक निश्चित संख्या को अनटार करें


12

मेरे पास एक बड़ी टारबॉल है जो एक रिमोट सिस्टम से हमारे स्थानीय सिस्टम पर FTP'd व्यस्त होने के कारण है।

मैं जानना चाहता हूं कि क्या एक बार में 50 फाइलों को अनररिंग शुरू करना संभव है ताकि ट्रांसफर होते समय उन फाइलों पर कार्रवाई शुरू हो सके।

जवाबों:


12

यहां एक विस्तृत विवरण दिया गया है कि किसी संग्रह से विशिष्ट फ़ाइलों को निकालना कैसे संभव है। विशेष रूप से GNU टार का उपयोग टारबॉल से एक या अधिक फ़ाइलों को निकालने के लिए किया जा सकता है। विशिष्ट संग्रह सदस्यों को निकालने के लिए, उनके सटीक सदस्य के नाम तर्क के रूप में दें।

उदाहरण के लिए:

tar --extract --file={tarball.tar} {file}

आप उन फ़ाइलों को भी निकाल सकते हैं जो एक विशिष्ट ग्लोबिंग पैटर्न (वाइल्डकार्ड) से मेल खाती हैं। उदाहरण के लिए, cbz.tar से उन सभी फ़ाइलों को निकालने के लिए, जो तस्वीर के साथ शुरू होती हैं, कोई बात नहीं उनकी निर्देशिका उपसर्ग, आप टाइप कर सकते हैं:

tar -xf cbz.tar --wildcards --no-anchored 'pic*'

सभी php फाइलें निकालने के लिए, दर्ज करें:

tar -xf cbz.tar --wildcards --no-anchored '*.php'

कहाँ पे,

-x: फ़ाइलों को निकालने के लिए टार को निर्देश देता है।
-f: फ़ाइल नाम / टारबॉल नाम निर्दिष्ट करता है।
-v: Verbose (फाइलों को निकालने के दौरान प्रगति दिखाएं)।
-j: bzip2 के माध्यम से फ़िल्टर संग्रह, decompress .bz2 फ़ाइलों का उपयोग करें।
-z: gzip के माध्यम से फ़िल्टर संग्रह, decompress .gz फ़ाइलों का उपयोग करें।
--wildcards: कमांड लाइन तर्कों को ग्लोबिंग पैटर्न के रूप में मानने के लिए टार को निर्देश देता है।
--no-anchored: यह सूचित करता है कि पैटर्न किसी भी / सीमांकक के बाद सदस्य नामों पर लागू होते हैं।


3
मैं विशिष्ट फाइलें निकालना नहीं चाहता। मैं सिर्फ पहली 50 फाइलें निकालना चाहता हूं क्योंकि मुझे नहीं पता कि फाइलों के नाम क्या हैं।
पीटर वैन नीकरक

4
आप "टार-टीएफ" का उपयोग करके फाइलनाम की एक सूची प्राप्त कर सकते हैं, "हेड" का उपयोग करके पहले 50 ले सकते हैं, फिर उस सूची को किसी अन्य टार कमांड में फाइलनाम की सूची के रूप में फीड कर सकते हैं। इस तरह: "tar -xf file.tar --no-anchored` tar -tf file.tar | head -50` "
सिमोन

यह संभव है (मेरे परीक्षण में) आंशिक रूप से छंटनी की गई ५० वीं फ़ाइल को निकालने के लिए .. यह -tसूची में मौजूद (वर्तमान) अंतिम फ़ाइल को टारबॉल पूरी तरह से डाउनलोड होने तक निकालने से बचने के लिए एक अच्छा विचार होगा । किसी भी समय, सूची में केवल फ़ाइल नाम दिखाए गए हैं, या स्थानांतरित किए जा रहे हैं, अर्थात। नहीं पूर्ण सूची; जब तक यह पूरी तरह से डाउनलोड न हो जाए।
पीटर।

2

खुद इस कोशिश नहीं की, लेकिन इस बारे में कैसे:

tar xvf archive.tar | head -n50

टार निकाले गए प्रत्येक फ़ाइल के लिए STDOUT को एक लाइन आउटपुट करता है, फिर headकमांड 50 लाइनों के बाद पाइप को मार देगा। पाइप के मरने पर, मुझे उम्मीद है कि टार भी मर जाएगा।


क्षमा करें, यह निश्चित रूप से होना चाहिए head। मुझे अपना उत्तर बदलने दो।
जिप्पी

मैंने जाँच नहीं की है, लेकिन मुझे डर है कि पाइप बफर के कारण, tarयह SIGPIPEd से पहले 50 से अधिक फ़ाइलों को निकाल सकता है, और विशेष रूप से यह अंतिम, अपूर्ण फ़ाइल को निकाल सकता है।
गाइल्स का SO- बुराई से रोकना '

2
tar -tvf tarfile.tar

आपको फाइलों की पूरी सूची देता है tarfile.tar

tar -xvf tarfile.tar fileToRestore  

यह आदेश पुनर्स्थापित करता है fileToRestore

कई फ़ाइलों को अनटार्ट करने के लिए, लेकिन उन सभी को नहीं जो आप कर सकते हैं:

  • आप से सभी फ़ाइल सूची डाल tarfile.tarमेंtar.txt

    tar -tvf tarfile.tar > tar.txt
    
  • अब आपके tar.txtपास फ़ाइलों की पूरी सूची है tarfile.tar और आप केवल उन फ़ाइलों को छोड़ सकते हैं जिन्हें आप पुनर्स्थापित करना चाहते हैं या सिर के साथ ...

    head -n50 tar.txt > tar2.txt
    

आप इन पंक्तियों को एक फ़ाइल में डाल सकते हैं

cat tar.txt|while read line
do
   tar -xvf tarfile.tar ${line}
done

या पूरी स्क्रिप्ट फ़ाइल:

#!/bin/bash

if [[ "$1" = "" || "$2" = "" ]]
   then
   echo ""
   echo "Uso: untar-list.sh tarfile.tar listfile.txt"
   echo ""
   exit 1
fi

tarfile=$1
file=$2

if [[ ! -f ${tarfile} ]]
   then
   echo ""
   echo "Archivo ${tarfile} no existe"
   echo ""
   exit 1
fi

if [[ ! -f ${file} ]]
   then
   echo ""
   echo "Archivo ${file} no existe"
   echo ""
   exit 1
fi

cat ${file}|while read line
do
  tar -xvf ${tarfile} ${line}
done

echo ""
echo "Finalizado"
echo ""

और बस यही


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