2010-05-06 73 views
2

我需要提取tar.gz文件。大約950mb。它還有另外23個tar.gz文件。這23個tar.gz文件中的每一個都有一個tar文件。我的問題是我如何輕鬆提取所有這些問題?有沒有我可以使用的命令行工具?如何輕鬆提取嵌套的tar.gz文件?

的結構是這樣的:預先

foo.tar.gz 
├───bar1.tar.gz 
│ ├───foobar1.tar 
├───bar2.tar.gz 
│ ├───foobar2.tar 
├───bar3.tar.gz 
│ ├───foobar3.tar 
├───bar4.tar.gz 
│ ├───foobar4.tar 
├───bar5.tar.gz 
│ ├───foobar5.tar 
├───bar6.tar.gz 
│ ├───foobar6.tar 
| .......... 
| .......... 
| .......... 
| 23 of them 

感謝。

回答

1

我結束了手動提取foo.tar.gz並使用以下shell腳本來提取這些bar * .tar.gz文件。

#!/bin/bash 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 
export PATH 
for next in *.tar.gz 
    do 
     echo "Untaring - $next" 
     tar -xzf $next -C ~/foo 
    done 
exit 0 

希望這會幫助別人。

+0

雖然你的解決方案工作,如果你想了解爲什麼你不應該用你的方式使用ls的輸出,http://stackoverflow.com/questions/1956144/bash-script- to-rename-all-files-in-a-directory/1956165#1956165 ...我找到了答案(對於那個問題),特別是使用'find'命令。 – 2010-05-06 21:23:29

0

是。

tar -xzOf foo.tar.gz bar1.tar.gz | tar -xO foobar1.tar 

應該這樣做。

+0

而且,當然,將它包裝在一個小腳本中(或複製+粘貼該行23次^ _ ^),您應該是金色的。 – 2010-05-06 03:28:57

+0

謝謝,但實際上並沒有工作。 – StarCub 2010-05-06 11:32:08

+0

如果你能解釋爲什麼它不起作用,那麼我可以更好地告訴你什麼是錯誤的......但是既然你已經解決了它,我想這不是太重要。 – 2010-05-06 12:37:12

2

您可以使用--to-command參數將每個提取的文件傳遞到另一個程序(在stdin上)。在這種情況下,您將它傳遞給另一個從stdin讀取數據的tar實例。

tar --to-command='tar -xzvf -' -xzvf foo.tar.gz