2009-07-13 155 views
120

我需要壓縮大約17-20 GB的大文件。我需要將它分成幾個文件,每個文件大約1GB。使用tar,gz,zip或bzip2分割文件

我通過Google搜索了一個解決方案,並找到了使用splitcat命令的方法。但他們根本不適用於大文件。此外,他們不會在Windows中工作;我需要在Windows機器上解壓縮它。

+2

我覺得你的痛苦,但這似乎沒有編程相關。 – 2009-07-13 15:18:41

+1

許多壓縮程序(例如7-Zip)能夠將壓縮文件分割成指定大小的卷,以便於分發。 – 2009-07-13 15:22:13

+0

這屬於superuser.com,但直到明天,私人測試纔開始,我被告知。 – JesperE 2009-07-13 15:27:11

回答

5

測試的代碼,首先創建一個單一的存檔文件,然後將其分解:

gzip -c file.orig > file.gz 
CHUNKSIZE=1073741824 
PARTCNT=$[$(stat -c%s file.gz)/$CHUNKSIZE] 

# the remainder is taken care of, for example for 
# 1 GiB + 1 bytes PARTCNT is 1 and seq 0 $PARTCNT covers 
# all of file 
for n in `seq 0 $PARTCNT` 
do 
     dd if=file.gz of=part.$n bs=$CHUNKSIZE skip=$n count=1 
done 

這種變異省略創建一個單獨的存檔文件,並直接去創造部分:

gzip -c file.orig | 
    (CHUNKSIZE=1073741824; 
     i=0; 
     while true; do 
      i=$[i+1]; 
      head -c "$CHUNKSIZE" > "part.$i"; 
      [ "$CHUNKSIZE" -eq $(stat -c%s "part.$i") ] || break; 
     done;) 

在這個變體,如果檔案的文件大小可被$CHUNKSIZE整除,則最後的部分文件將具有0字節的文件大小。

23

如果您從Linux分裂出來,仍然可以在Windows中進行重組。

copy /b file1 + file2 + file3 + file4 filetogether 
229

可以使用split命令與-b選項:

split -b 1024m file.tar.gz 

它可以通過@Joshua的答案在Windows機器上進行重組。

copy /b file1 + file2 + file3 + file4 filetogether 

編輯:作爲@Charlie在下面的評論說,你可能需要設置一個前綴,因爲明確地將使用x否則,這可能會造成混淆。

split -b 1024m "file.tar.gz" "file.tar.gz.part-" 

// Creates files: file.tar.gz.part-aa, file.tar.gz.part-ab, file.tar.gz.part-ac, ... 

編輯:編輯職位,因爲問題被關閉,最有效的解決方案是非常接近這個答案的內容:

# create archives 
$ tar cz my_large_file_1 my_large_file_2 | split -b 1024MiB - myfiles_split.tgz_ 
# uncompress 
$ cat myfiles_split.tgz_* | tar xz 

該解決方案避免了需要使用(de)壓縮時的中間大文件。使用tar -C選項爲結果文件使用不同的目錄。順便說一句,如果存檔包含從只有一個文件,焦油可以被避免,只使用gzip的:

# create archives 
$ gzip -c my_large_file | split -b 1024MiB - myfile_split.gz_ 
# uncompress 
$ cat myfile_split.gz_* | gunzip -c > my_large_file 

Windows系統可以下載相同的命令或使用Cygwin的移植版本。