我需要压缩大约17-20 GB的大文件。我需要将它分成几个文件,每个文件大约1GB。
我通过Google搜索了一个解决方案,并找到了使用split
和cat
命令的方法。但它们根本不适合大文件。此外,它们不适用于Windows;我需要在Windows机器上提取它。
答案 0 :(得分:241)
您可以将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选项为生成的文件使用不同的目录。顺便说一下,如果存档只包含一个文件,则可以避免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。
答案 1 :(得分:25)
如果您从Linux拆分,您仍然可以在Windows中重新组装。
copy /b file1 + file2 + file3 + file4 filetogether
答案 2 :(得分:9)
将tar用于split into multiple archives
有很多程序可以在Windows上使用tar文件,包括cygwin。
答案 3 :(得分:7)
经过测试的代码,最初会创建一个存档文件,然后将其拆分:
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字节。