2010-06-01 7 views
23

निर्देशिका में untar filename.tr.gz को एक संग्रह उदा। "tar123.tar.gz" निर्देशिका/myunzip/tar123/"एक शेल कमांड का उपयोग करनिर्देशिका "filename"

tar -xf tar123.tar.gz फ़ाइलों को डिकंप्रेस करेगा लेकिन उसी निर्देशिका में जहां मैं काम कर रहा हूं।

यदि फ़ाइल नाम "tar233.tar.gz" होगा, तो मैं इसे /myunzip/tar233.tar.gz पर डिकंप्रेस करना चाहता हूं "इसलिए गंतव्य निर्देशिका फ़ाइल नाम पर आधारित होगी।

क्या किसी को पता है कि टैर कमांड यह कर सकता है या नहीं?

उत्तर

30
बैश और GNU राल के साथ

:

file=tar123.tar.gz 
dir=/myunzip/${file%.tar.gz} 
mkdir -p $dir 
tar -C $dir -xzf $file 
+0

समस्या यहाँ है कि मैं क्या फ़ाइल नाम हो जाएगा पता नहीं है है। यह एक संस्करण फ़ाइल होगी इसलिए आज यह 1.tar.gz हो सकता है लेकिन कल यह 2.tar.gz हो सकता है। क्या बस "फाइल = क्या-कभी-इन-/home/user" कहने का कोई तरीका है? – Jorre

+0

आपको इसे किसी भी तरह से जानना होगा। अगर वे सॉर्ट करते हैं, तो आप 'file = $ (ls -1 $ pattern | tail -1)' जैसे कुछ का उपयोग कर सकते हैं। –

4

आप -C ध्वज के साथ निकालने से पहले निर्देशिका बदल सकते हैं, लेकिन निर्देशिका पहले से मौजूद है। (आप फ़ाइल-विशिष्ट निर्देशिका बनाते हैं, तो मैं दृढ़ता से उन्हें foo.tar.gz बुला खिलाफ सलाह देते हैं -।। इस भ्रम को विस्तार का तात्पर्य है कि यह एक संग्रह फ़ाइल है, लेकिन यह वास्तव में एक निर्देशिका है कि होगा लीड)

2

प्रयास करें

file=tar123.tar.gz 
dir=/myunzip/$(basename $file .tar.gz) # matter of taste and custom here 
[ -d "$dir" ] && { echo "$dir already exists" >&2; exit 1; } 
mkdir "$dir" && (gzip -d "$file | (cd "$dir" && tar xf -)) 

यदि आप जीएनयू टैर का उपयोग कर रहे हैं तो आप इसे -C "$dir" भी विकल्प दे सकते हैं जो इसे निकालने से पहले निर्देशिका में बदल देगा। लेकिन ऊपर दिए गए कोड को कांस्य युग के साथ भी काम करना चाहिए।

अस्वीकरण: उपर्युक्त कोड में से कोई भी परीक्षण नहीं किया गया है।

23
tar -xzvf filename.tar.gz -C destination_directory 
+1

मुझे केवल '-C' भाग की आवश्यकता है, धन्यवाद! – juanmirocks

संबंधित मुद्दे