टार निष्कर्षण फ़ाइल नाम पर निर्भर करता है?


33

मैं अक्सर sourceforge.net से wget के साथ टारबॉल डाउनलोड करता हूं।

डाउनलोड की गई फ़ाइलों को नाम दिया गया है, जैसे SQliteManager-1.2.4.tar.gz?r=http:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F&ts=1305711521&use_mirror=switch

जब मैं करने की कोशिश करता हूं

tar xzf SQliteManager-1.2.4.tar.gz\?r\=http\:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F\&ts\=1305711521\&use_mirror\=switch

मुझे निम्न त्रुटि संदेश प्राप्त होता है:

tar (child): Cannot connect to SQliteManager-1.2.4.tar.gz?r=http: resolve failed

gzip: stdin: unexpected end of file
tar: Child returned status 128
tar: Error is not recoverable: exiting now

foo.tar.gzनिष्कर्षण के लिए फ़ाइल का नाम बदलने के बाद सही काम करता है।

वहाँ एक रास्ता है, कि मैं निकालने से पहले हर बार लक्ष्य फ़ाइल का नाम बदलने के लिए मजबूर नहीं हूँ?

जवाबों:


50

आपके द्वारा देखी जा रही त्रुटि का कारण GNU टार प्रलेखन में पाया जा सकता है :

यदि संग्रह फ़ाइल नाम में एक बृहदान्त्र (':') शामिल है, तो यह माना जाता है कि यह किसी अन्य मशीन पर एक फ़ाइल है [...]

यही है, यह SQliteManager-1.2.4.tar.gz?r=httpएक होस्ट नाम के रूप में व्याख्या कर रहा है और इसे आईपी पते पर हल करने की कोशिश कर रहा है, इसलिए "संकल्प विफल" त्रुटि।

यही कहने के लिए दस्तावेज़ीकरण आगे बढ़ता है:

यदि आपको एक फ़ाइल का उपयोग करने की आवश्यकता है, जिसके नाम में एक बृहदान्त्र शामिल है, तो रिमोट टेप ड्राइव व्यवहार को '--force- स्थानीय' विकल्प का उपयोग करके बाधित किया जा सकता है।


ध्यान दें कि --force-localपहले जोड़ा जाना है f... जब मैंने पहली बार यह कोशिश की तो यह मुझे एक त्रुटि संदेश दे रहा था कि इस तरह की कोई फ़ाइल नहीं है --force-local। हो सकता है कि यह "नो डुह" भी हो लेकिन मैंने 5 मिनट बाद तक की गई गलती को नहीं पहचाना।
आर्टऑफवर्फ

@ArtOfWarfare: fएक ऐसा तर्क लेता है जो टारफाइल है। आप इसके और इसके तर्क के --force-localबीच नहीं रख सकते हैं f, लेकिन यह सभी कार्यक्रमों के लिए मानक है, न कि सिर्फ tarऔर सिर्फ -f। आप रख सकते हैं --force-localके बाद fलंबे समय के रूप के रूप में यह करने के लिए बहस के बाद भी है f
2

जैसे मैंने अपनी टिप्पणी में कहा, शायद यह "कोई दोहा" नहीं है। मैं इस तरह से टार का उपयोग करता हूं tar -cvzf ...और यह भी नहीं सोचता कि प्रत्येक ध्वज वास्तव में 99% समय क्या करता है - यह केवल प्रतिवर्त है कि मैं कैसे एक tar.gz बना सकता हूं।
आर्टऑफवर्फ

इस नोट पर, ये दोनों (@ArtOfWarfare और @camh) क्या कह रहे हैं, इस पर और अधिक उपयोगी होने के लिए एक उदाहरण है: tar zxvf C:\Users\jdoe\Documents\tarfile.tgz --force-local
डॉ। दान

6

जब आप डाउनलोड करते हैं wget, तो -Oविकल्प के साथ आउटपुट फ़ाइल नाम निर्दिष्ट करें ।

wget "http://domain.com/file.tgz?crazy=args&stuff=todelete" -O file.tgz

यह फ़ाइल को दिए गए फ़ाइल नाम के साथ सहेजने और आपको परेशानी को बचाने या नाम बदलने का कारण बनेगा। और नहीं, आप केवल वही नहीं हैं जो इच्छा स्रोत sourcefourge इतना गूंगा नहीं होगा जितना कि url मापदंडों के साथ फाइल को पास करना है।


यह SourceForge की गलती नहीं है, लेकिन है wget--content-dispositionसर्वर-निर्दिष्ट फ़ाइल नाम के साथ सहेजने के लिए ध्वज का उपयोग करें (लेकिन सुरक्षा निहितार्थों से सावधान रहें, क्योंकि SourceForge तब एक मनमाना फ़ाइल नाम लिख सकता है)।
पीसीवर्ल्ड

4

का उपयोग कर डाउनलोड करें

wget --trust-server-names URL

इस तरह से सही फ़ाइल नामों के साथ wget बचाएगा। डिफ़ॉल्ट रूप से यह URL में अंतिम घटक का उपयोग करता है

उदाहरण के लिए

wget --trust-server-names http://sourceforge.net/projects/sqlitemanager/files/sqlitemanager/1.2.4/SQliteManager-1.2.4.tar.gz/download

4

जैसा कि ऊपर उद्धृत किया गया है, :(स्तंभ) tarलगता है कि यह एक दूरस्थ फ़ाइल है। इसलिए हमें इस तथ्य को लागू करने की आवश्यकता है कि यह स्थानीय है।

विफल

$ tar czf "back$(date -u +"%H:%M").tar.gz" ./
tar (child): Cannot connect to back10: resolve failed
tar: Child returned status 128
tar: Error is not recoverable: exiting now

समाधान

इस तथ्य को स्पष्ट करें कि यह एक स्थानीय फ़ाइल है ./(वर्तमान निर्देशिका) को जोड़कर और सही तरीके से उद्धृत करते हुए:

$ tar czf ./"back$(date -u +'%H:%M').tar.gz" ./
tar: .: file changed as we read it

यह तथ्य इस तथ्य के कारण है कि मैं स्रोत निर्देशिका में निर्माण कर रहा हूं।


एक लंबे झंडे का उपयोग करने से बेहतर है। इसके अलावा, मेरा मानना ​​है कि दूरस्थ होस्ट डाउनलोडिंग बेकार विकल्प है, जबकि इस उद्देश्य को प्राप्त करने के लिए विशिष्ट उपकरण हैं।
अलीरज़ा मोहम्मदी

3

पहले से डाउनलोड की गई फ़ाइलों के लिए, यह काम करना चाहिए:

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