2012-11-05 122 views
1

我有大約60MB的8000 gz文件。我想將它們合併成幾個較大的文件。那麼如何在bash腳本中做到這一點而不解壓縮Shell腳本:將小gzip文件加入大文件而不解壓縮

Shell腳本可能會將輸入視爲新文件大小或要組合的文件數。

例如說我有1.gz,2.gz,3.gz ... 10.gz 現在我需要一個文件每個說3個文件,所以現在1.gz,2.gz和3.gz將結合成1_new.gz等。

+1

請編輯你的問題,包括你已經嘗試過。祝你好運。 – shellter

+0

將原始大文件拆分爲小文件的一種方法:http://en.wikipedia.org/wiki/Split_(Unix) – Bernhard

+0

@shellter和Brian:對不起,我不熟悉shell腳本。 – Amar

回答

1

有可能concatinate gzip版文件放在一起,但是當你gunzip生成的文件,你會得到一個單一的流,請參閱gzip manual以供參考。

腳本將類似於安斯加爾Wiechers的一個tar

#!/bin/bash 

maxnum=$1 
i=1 
j=0 
for f in *.gz; do 
    cat $f >> archive_$j.gz 
    i=$((i+1)) 
    if [ $i -eq $maxnum ]; then 
     i=1 
     j=$((j+1)) 
    fi 
done 

注意,上面的代碼是未經測試。

如果要存檔的東西正確tar是一個更好的解決方案,但如果你想要做的是concatinate一些已gzip ED那麼這樣的concatination,因爲這是好文件。

+0

謝謝你,這足夠:) – Amar

1

gzip只能壓縮單個文件。您需要tar將多個文件合併到一個歸檔中,然後可以(可選)使用gzip進行壓縮。如果你只是要合併的壓縮文件,可以使用這樣的事情:

maxnum=$1 
i=1 
j=0 
for f in *.gz; do 
    tar rf archive_$j.tar $f 
    if [ $i -eq $maxnum ]; then 
    i=1 
    j=$((j+1)) 
    fi 
done 

這將產生含有的壓縮源文件未壓縮tar文件。

如果要生成包含未壓縮源文件的壓縮tar文件,上述操作將不起作用,因爲您無法更新壓縮tar文件。你需要先解壓縮源文件,然後創建它們壓縮tar文件:

maxnum=$1 
i=1 
j=0 
flist= 
for f in *.gz; do 
    gunzip $f 
    flist="$flist $(basename $f .gz)" 
    if [ $i -eq $maxnum ]; then 
    tar czf archive_$j.tar.gz --remove-files $flist 
    i=1 
    j=$((j+1)) 
    flist= 
    fi 
done 
+1

嗨安斯加,感謝您的詳細回覆:)但我只需要結合大量的gzip文件,而不需要將它們解壓縮到少數幾個文件,這就是它的要求。如果我不清楚,我會編輯這個問題。 – Amar