'टार' कमांड का उपयोग करके किसी अन्य निर्देशिका में फाइलें कैसे निकालें?


672

मैंने सोचा था tar archive.tar /users/mylocationकि काम करेगा, लेकिन यह नहीं है। मैं उसे कैसे कर सकता हूँ?


1
इसके अलावा, -C, --directory DIR\n change to directory DIRबल्कि के रूप में वर्णित किया जाना चाहिए change output directory to DIR (will fail if DIR doesn't exist)। धन्यवाद @ मिच। @ Bryan_Larsen का उत्तर भी देखें
वैध

1
@ उज्जवल सिंग: दरअसल, टार मैन पेज उतना मददगार नहीं है। यह "-सी डीआईआर" को "निर्देशिका डीआईआर में परिवर्तन" के रूप में वर्णित करता है। इससे भी बदतर: "टार्क-सी mydir xf आर्काइव।टार" काम नहीं करता है, जबकि "टार एक्सएफ आर्काइव.टार -सी मायडिर" करता है।
पैट मोरिन

@PatMorin निष्पक्ष होने के लिए, एक बार जब आप तर्क का उपयोग करने वाले कन्वेंशनों को समझ जाते हैं, तो यह समझ में आता है। आप यह भी कर सकते हैं tar xfC archive.tar mydirया tar -C mydir -xf archive.tar। यह केवल पारंपरिक शैली और GNU- शैली के झंडे मिला रहा है जो चीजों को तोड़ता है, जैसा कि ... ईमानदारी से अपेक्षित है। पारंपरिक झंडे सभी को पहले तर्क के रूप में एक बूँद के रूप में पारित किया जाता है। यदि वे पहले नहीं हैं तो आप उनसे काम करने की उम्मीद नहीं कर सकते। (मेरा मतलब है, हाँ, यह वैसे भी व्याख्या करना संभव है - मेरी बात यह है कि ऊपर और परे होगा, मानक नहीं)
निक हार्टले

जवाबों:


958

वर्तमान से भिन्न निर्देशिका का संग्रह निकालने के लिए , के रूप में -C, या --directory, टार विकल्प का उपयोग करें

tar -xf archive.tar -C /target/directory

ध्यान दें कि उस कमांड को चलाने से पहले टारगेट डायरेक्टरी मौजूद है (इसे द्वारा बनाया जा सकता है mkdir /target/directory)।

अन्य विकल्पों के लिए मैनुअल पेज (कमांड:) पढ़ें man tar


क्या रास्ता छीना जा सकता है: यानी सिर्फ फ़ाइल को पुनः प्राप्त करें
zzapper

3
यदि यह एक बड़ी फ़ाइल है, तो जब आप कमांड चलाते हैं, तो आपके पास काम करते समय कई सेकंड या मिनटों के लिए भी आउटपुट नहीं होता है। आप इसे -vफ़्लैग ( वर्बोज़ मोड ) जोड़कर ठीक कर सकते हैं जो प्रत्येक फ़ाइल के नाम को सूचीबद्ध करता है क्योंकि यह इसे निकालता है।
IQAndreas

यदि आपको इससे परेशानी हो रही है, --strip-components=1तो अन्य उत्तर से भी सलाह लें।
DreadPirateShawn

9
@ कॉन्सॉल्ट्सटन xkcd.com/1168
डंकन एक्स सिम्पसन

9
क्या यह आश्चर्यजनक नहीं है कि इन वर्षों के बाद, सभी विकल्पों के साथ tarजमा हुआ है, आउटपुट निर्देशिका बनाने के लिए अभी भी कोई विकल्प नहीं है अगर यह मौजूद नहीं है ?
EM0

260

ध्यान दें कि यदि आपके टारबॉल में पहले से ही एक निर्देशिका नाम है जिसे आप बदलना चाहते हैं, तो --strip-components=1विकल्प जोड़ें :

tar xf archive.tar -C /target/directory --strip-components=1

2
धन्यवाद। Wget / etc के माध्यम से डाउनलोड में हमेशा एक 'पैरेंट' डायरेक्टरी होती है। यह पूर्ण उत्तर imo है - या उपरोक्त उत्तर में ध्यान दिया जाना चाहिए।
bshea

मुझे इसकी ही खोज थी। --strip-componentsजब विभिन्न संस्करण का उपयोग हो सकता है, तो चल रहे प्रावधान उपयोगी होते हैं। इस तरह /target/directoryसे एक सामान्य नाम हो सकता है, इस बात की चिंता किए बिना कि प्रदाता ने अपने संग्रह फ़ोल्डर का नाम कैसे चुना।
जैक_हु

30

पिछले उत्तरों और टिप्पणियों को मिलाकर:

केवल सामग्री निकालने और लक्ष्य निर्देशिका बनाने के लिए अगर यह गायब है:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

ज़िप में रूट (प्रथम स्तर) निर्देशिका निकालने और निकालने के लिए

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

20

एक अन्य विकल्प का उपयोग करना है - एक-शीर्ष-स्तर। यह मूल के फ़ाइल नाम के आधार पर स्वचालित रूप से एक निर्देशिका बनाएगा।

tar zxvf filename.tgz --one-top-level

इसके अतिरिक्त, यदि आप चाहें, तो आप अपना स्वयं का उल्लेख कर सकते हैं और टार इसे स्वचालित रूप से बनाएगा।

tar zxvf filename.tgz --one-top-level=new_directory

3
मैं ग्नू टार 1.26 का उपयोग कर रहा हूं और मुझे इसके लिए एक गैर-मान्यताप्राप्त विकल्प त्रुटि मिलती है--one-top-level
एम्मा स्ट्रबेल

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

2

निष्कर्षण के संबंध में मुझे जो दिलचस्प लगा, वह यह है कि यह निर्भर करता है कि आपने संग्रह कैसे बनाया है, इस उदाहरण को देखें

cd /tmp
mkdir folder
touch folder/file.txt

जब आप tar -zcvf folder.tar.gz folderसब कुछ उम्मीद के अनुसार करते हैं = जब आप इसे अनटार करते हैं तो यह अनट्रेड हो जाएगा (फ़ोल्डर बनाया जाएगा, यदि आपने इसे हटा दिया है) /tmp/folder/

लेकिन, जब आप टार बनाएंगे tar -zcvf tmp-folder.tar.gz /tmp/folderऔर आप इसे / tmp फ़ोल्डर में अनारक्षित करेंगे, तो परिणाम /tmp/tmp/folderनिर्देशिका होगा ! इस तरह के मामले में आपको इसे / - करना होगाtar -xf tmp-folder.tar.gz -C /


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