'टार' अनपैक करें, लेकिन निकालने के लिए निर्देशिका नाम बदलें


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

मैं फ़ाइल और नाम को फ़ोल्डर 2 में निकालना चाहता हूं । क्या इसे वन-लाइनर के रूप में किया जा सकता है?

जवाबों:


35

का प्रयोग करें -Cऔर --strip-components(देखें man tar)।

उदाहरण:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

स्पष्टीकरण:

-Cध्वज मान लिया गया एक निर्देशिका जगह में पहले से ही है तो टार फ़ाइल की सामग्री यह में विस्तार किया जा सकता है। इसलिए mkdir FOLDER

--strip-componentsझंडा जब एक टार फ़ाइल स्वाभाविक रूप से एक फ़ोल्डर में ही विस्तार हैं, मान लीजिए, GitHub जहां यह उदाहरण के लिए की तरह प्रयोग किया जाता है repo-name-masterफ़ोल्डर। निश्चित रूप से आपको पहले स्तर के फ़ोल्डर की आवश्यकता नहीं होगी, इसलिए यहां --strip-componentsसेट किया गया 1स्वचालित रूप से आपके लिए उस पहले फ़ोल्डर को हटा देगा। बड़ी संख्या में सेट किया जाता है गहरे नेस्टेड फ़ोल्डर्स हटा दिए जाते हैं।


मैं पढ़ता हूं man tar। हाजिर नहीं हुआ --strip-components। अच्छा एक
फेलिप अल्वारेज़

1
tar-1.14 उपयोग -स्ट्रिप-पथ, tar-1.14.90 + उपयोग -स्ट्रिप-घटक। शायद यहाँ समस्या है?
मिखाइल मोस्कलेव

मैं इसे बढ़ाता हूं अगर यह एक उदाहरण देता है और न केवल स्विच, ऑनलाइन मैनुअल राज्यों के रूप में , 3 तर्क शैली भ्रम को जन्म देती हैं।
इयान

Tar -xz पर -f भूल गए, मुझे लगता है। मेरे लिए असफल रहा। मैंने सोचा कि मैं इस समय बिना किसी कारण के प्रयोग कर रहा हूँ ...
जॉन कैरेल

17

आप --transformविकल्प को थोड़ा और अधिक लचीलेपन के लिए भी उपयोग कर सकते हैं । यह किसी भी sed प्रतिस्थापन (ओं) के संचालन को स्वीकार करता है।

उदाहरण के लिए, मैं इस तरह से एक नई निर्देशिका के लिए एक लिनक्स टारबॉल निकालता हूं ताकि मैं एक पैच लागू कर सकूं:

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