Linux 怎么将zip与split命令结合使用?

时间:2022-08-11 23:20:10
要对系统进行备份,压缩的同时进行加密及分卷。

zip aa.zip -r mysql_data  -P 123456 | split -a 2 -d -b 100m aa.zip ab.zip.

分步执行可以成功,使用管道就出现如下问题:
split: 无法打开"aa.zip" 读取数据: 没有那个文件或目录

请指教!

2 个解决方案

#1


我的理解是这样的,不一定对

管道|符号是前一个命令的输出作为后一个的输入,zip aa.zip -r mysql_data  -P 123456 命令并没有输出aa.zip(一定要把命令得到的结果和命令输出区分开),所以后面的命令当然出错了。
你可以使用符号&&。
zip aa.zip -r mysql_data  -P 123456 && split -a 2 -d -b 100m aa.zip ab.zip

#2


zip本身就可以分割,只要加上-s 1m这种参数就可以:
zip /tmp/aa.zip -s 1m  -P 123456 -r mysql_data

在tmp下可以看到
aa.zip aa.z01 ...

如果一定要用split,/tmp/aa.zip就要替换为“-”,表示输出到stdout,而不是输出到aa.zip这个文件,而split的输入文件名也要替换为“-”,表示从stdin输入。
zip - -P 123456 -r mysql_data | split - -d -b 1m /tmp/aa.zip. #输出文件前缀(只能叫前缀)最后最好有个“.”

在tmp下可以看到
aa.zip.00 aa.zip.01 ...

具体使用可以查man。

#1


我的理解是这样的,不一定对

管道|符号是前一个命令的输出作为后一个的输入,zip aa.zip -r mysql_data  -P 123456 命令并没有输出aa.zip(一定要把命令得到的结果和命令输出区分开),所以后面的命令当然出错了。
你可以使用符号&&。
zip aa.zip -r mysql_data  -P 123456 && split -a 2 -d -b 100m aa.zip ab.zip

#2


zip本身就可以分割,只要加上-s 1m这种参数就可以:
zip /tmp/aa.zip -s 1m  -P 123456 -r mysql_data

在tmp下可以看到
aa.zip aa.z01 ...

如果一定要用split,/tmp/aa.zip就要替换为“-”,表示输出到stdout,而不是输出到aa.zip这个文件,而split的输入文件名也要替换为“-”,表示从stdin输入。
zip - -P 123456 -r mysql_data | split - -d -b 1m /tmp/aa.zip. #输出文件前缀(只能叫前缀)最后最好有个“.”

在tmp下可以看到
aa.zip.00 aa.zip.01 ...

具体使用可以查man。