2011-02-04 10 views
10

मेरी tree आदेश रिटर्नकैसे फ्लैट tar संग्रह

tmp 
`-- t 
    `-- e 
     |-- 23.ps 
     `-- s 
      |-- adsf.ps 
      `-- t 
       `-- dupa.ps 

बनाने के लिए कैसे मैं निम्नलिखित संरचना के साथ tmp निर्देशिका में संग्रह ps.tar.gz बना सकते हैं:

tmp 
|-- ps.tar.gz 
| |-- 23.ps 
| |-- adsf.ps 
| `-- dupa.ps 
`-- t 
    `-- e 
     |-- 23.ps 
     `-- s 
      |-- adsf.ps 
      `-- t 
       `-- dupa.ps 

?

+0

mkdir संग्रह; टी/-नाम * .ps -exec ln {} संग्रह/\ ढूंढें; ; (सीडी संग्रह और टैर zcf ../ps.tar.gz * .ps); आरएम-आरएफ संग्रह – sastanin

उत्तर

4
outfile=$(pwd)/ps.tar;find . -type f | while read file; do 
    tar rf $outfile -C $(dirname $file) $(basename $file) 
done 
gzip $outfile 
+1

"सीडी" की कोई ज़रूरत नहीं है, टैर-सी का उपयोग करें! – chris

+0

अच्छा बिंदु क्रिस, इसका उपयोग करने के लिए अद्यतन! – cowsandmilk

+1

यदि आप उपरोक्त में उपरोक्त करना चाहते हैं: ढूंढें। -type f -exec bash -c "archive =।/ps.tar.gz; fname = \' basename {} \ '; fdir = \' dirname {} \ '; tar cfz \ $ archive -C \ $ fdir \ $ fname "\; – Qben

11

जीएनयू टार के लिए आप --xform तर्क का उपयोग कर सकते हैं। यह sed अभिव्यक्ति लेता है और इसे प्रत्येक फ़ाइल नाम पर लागू करता है। तो अंतिम / तक सभी वर्णों को हटाने के लिए, आप इसका उपयोग कर सकते हैं:

tar -c --xform s:^.*/:: your-files 
+0

http://serverfault.com/a/566345/343194 के साथ संयोजन में कई निर्देशिकाओं के लिए बेहतर परिणाम प्राप्त किया जा सकता है। कुछ 'ढूंढें ./commondir -type f | tar --transform's/.*\/// g '-cvzf ./file.tar.gz - फाइल-से =/dev/stdin'। इस तरह खाली बाल निर्देशिका को बाहर रखा जाएगा। –

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