Windows平台文件拆分与完整性检查的过程


场景

有时候在没有linux主机的情况下, 自己下载下来的文件比较大.
比较难以上传到一些特殊的系统/主机上面. 

这个时候需要将文件进行拆分. 
所以可以通过winrar 或者是zip等工具进行打包切分
但是一方面,压缩,解压缩表费时费力. 
另外迁移到其他操作系统可能兼容性也存在问题. 

所以这个时候想着能够方便快捷的进行文件的拆分与合并.
并且可以无损的迁移到 linux 系统上面.

工具选择

Windows自带的bash
或者是 cygwin等模拟linux的工具.

安装部署说明

我的机器 bash一直存在问题. 

适用于 Linux 的 Windows 子系统没有已安装的分发。

使用 'wsl.exe --list --online' 列出可用的分发
并使用 'wsl.exe --install <Distro>' 进行安装。

也可以通过访问 Microsoft Store 安装分发:
https://aka.ms/wslstore
Error code: Bash/Service/CreateInstance/GetDefaultDistro/WSL_E_DEFAULT_DISTRO_NOT_FOUND

不知道是不是windows版本的问题, 比较难搞.

cygwin

网上的安装说明比较多, 不在详细展开, 仅说明一下如何使用. 

E:\cygwin64>Cygwin.bat

zhaob@zhao-7192 ~
$ df -Th
文件系统       类型  容量  已用  可用 已用% 挂载点
E:/cygwin64    ntfs  932G  714G  219G   77% /
C:             ntfs  201G  154G   47G   77% /cygdrive/c
D:             ntfs  275G   87G  189G   32% /cygdrive/d

zhaob@zhao-7192 ~
$ cd /cygdrive/d/BaiduNetdiskDownload/

zhaob@zhao-7192 /cygdrive/d/BaiduNetdiskDownload
$ du -ahd 1 |sort -k1hr |tail -n 3

然后可以使用命令 split 进行处理

split命令的说明

split -l 100
split -b 100m

-l 表示是lines, 可以按照行进行切分. 主要是进行 csv或者是文本的切分. 这样能够准确,不会切分坏了.

-b 是大小的含义 100m 指代 每个文件100mb大小.  主要是进行压缩包的处理. 便于切分上传.

split -l 1000 something someprefix 

第一个是要切分的文件. 
第二个是切分出来文件的前缀.

文件合并

split 拆分的文件 合并非常容易

可以使用 cat someprefix* >somethinginone 
就可以将split 切分的文件进行合并了.

文件准确性检查

1. linux 可以使用
for i in `ls` ; do  md5sum $i ; done 
计算每个文件的md5值. 

2. windows 可以使用
certutil -hashfile someprefixaa  md5 
可以计算文件的md5值

可以看看 windows平台上面的 md5与linux上传后的文件的md5进行对比. 

如果有差异可能会失败

需要完全一致, 才能保证文件完全可用.