使用tar,gz,zip或bzip2分割文件

我需要压缩大约17-20 GB的大文件。 我需要将它分成几个文件,每个文件大约1GB。

我通过Googlesearch了一个解决scheme,并find了使用splitcat命令的方法。 但是他们根本不适合大文件。 此外,他们不会在Windows中工作; 我需要在Windows机器上解压缩它。

您可以使用带有-b选项的split命令:

 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, ... 

编辑 :编辑post,因为问题是closures的,最有效的解决scheme是非常接近这个答案的内容:

 # 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 

这个解决scheme避免了(de)压缩时需要使用中间大文件。 使用tar -c选项为结果文件使用不同的目录。 顺便说一句,如果档案只包含一个文件,tar可以避免,只有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。

如果你是从Linux分裂,你仍然可以在Windows重新组装。

 copy /b file1 + file2 + file3 + file4 filetogether 

使用焦油拆分成多个档案

有很多程序可以在Windows上使用tar文件,包括cygwin。

经过testing的代码,最初创build一个单一的档案文件,然后拆分它:

  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 

这个变种省略了创build单个档案文件并直接创build部分:

 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字节。