मेरे पास एक बड़ी टारबॉल है जो एक रिमोट सिस्टम से हमारे स्थानीय सिस्टम पर FTP'd व्यस्त होने के कारण है।
मैं जानना चाहता हूं कि क्या एक बार में 50 फाइलों को अनररिंग शुरू करना संभव है ताकि ट्रांसफर होते समय उन फाइलों पर कार्रवाई शुरू हो सके।
मेरे पास एक बड़ी टारबॉल है जो एक रिमोट सिस्टम से हमारे स्थानीय सिस्टम पर FTP'd व्यस्त होने के कारण है।
मैं जानना चाहता हूं कि क्या एक बार में 50 फाइलों को अनररिंग शुरू करना संभव है ताकि ट्रांसफर होते समय उन फाइलों पर कार्रवाई शुरू हो सके।
जवाबों:
यहां एक विस्तृत विवरण दिया गया है कि किसी संग्रह से विशिष्ट फ़ाइलों को निकालना कैसे संभव है। विशेष रूप से 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
: यह सूचित करता है कि पैटर्न किसी भी / सीमांकक के बाद सदस्य नामों पर लागू होते हैं।
-t
सूची में मौजूद (वर्तमान) अंतिम फ़ाइल को टारबॉल पूरी तरह से डाउनलोड होने तक निकालने से बचने के लिए एक अच्छा विचार होगा । किसी भी समय, सूची में केवल फ़ाइल नाम दिखाए गए हैं, या स्थानांतरित किए जा रहे हैं, अर्थात। नहीं पूर्ण सूची; जब तक यह पूरी तरह से डाउनलोड न हो जाए।
खुद इस कोशिश नहीं की, लेकिन इस बारे में कैसे:
tar xvf archive.tar | head -n50
टार निकाले गए प्रत्येक फ़ाइल के लिए STDOUT को एक लाइन आउटपुट करता है, फिर head
कमांड 50 लाइनों के बाद पाइप को मार देगा। पाइप के मरने पर, मुझे उम्मीद है कि टार भी मर जाएगा।
head
। मुझे अपना उत्तर बदलने दो।
tar
यह SIGPIPEd से पहले 50 से अधिक फ़ाइलों को निकाल सकता है, और विशेष रूप से यह अंतिम, अपूर्ण फ़ाइल को निकाल सकता है।
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 ""
और बस यही