前端在 bash 中使用 zip 踩坑记录

各位大佬好,最近被布置了一个任务,说是要对 workflow 进行优化,期间经历了各种坑,下面记录下来,方便自己,也方便你们。

今天这个坑和在 bash 中执行压缩命令 zip 有关。这里的 bash 指的是安装 git 的时候自带的 shell 环境。

下面一起来看看我都遇到哪些抓狂的事情,以及怎么样解决的吧。

当然,各位大佬有更好的办法也可以在评论区教教我,感谢感谢!

坑1:根本就没有这个命令好吧

显然,这个阉割版的 shell 环境并没有 zip 命令。

为此,我不得不去网上下载一个,这里长话短说,参考这篇文章即可: 在 Windows 环境下的 Bash 中安装 Tree 命令 - 掘金 (juejin.cn)

然后我就直接到这个网站下载了 zip 的二进制文件: GnuWin - Browse /zip/3.0 at SourceForge.net

解压之后,按照引用文章中的技巧,将 zip.exe 放到对应的目录下,重启 vscode, 然后就报错了。。

不过这都不是事,经过我不懈的努力,最后证明,是缺失了一个公共文件:bzip2.dll

幸好,这个文件在刚才的网站上也能下载: GnuWin - Browse /bzip2/1.0.5 at SourceForge.net

下载那个二进制文件:bzip2-1.0.5-bin.zip 下载那个大一点的,最后一个, 158.4kB

下载完之后解压,只需要将 bzip2.dll 这个文件复制到放置 zip.exe 的地方就可以了:

如此一来,重启 VScode, 然后尝试压缩一下,非常完美!

坑2:压缩层级超乎意料

我遇到的第二个坑和压缩完毕之后的层级目录有关系。

举个例子,假如我想要压缩 test 目录成为 test.zip 压缩文件,常规来说我当然想:

bash 复制代码
zip test.zip test

但是这样做,最终压缩文件的层级就变成了:

看见没,多了一层,也就是 test.zip 进去之后有一个 test 目录。

这不是我期望的效果,我希望 test.zip 包裹的直接就是文件。

这个问题解决起来也很简单,只需要将压缩命令改成下面即可:

bash 复制代码
cd test
zip test.zip *

这样一来问题就解决了,但是由于使用了 cd 命令,导致脚本执行完毕之后路径变了。这不是想要的结果,所以,将上面的 shell 代码封装到一个文件中,这样执行之后也不会改变当前的路径信息:

bash 复制代码
touch zip.sh
echo 'cd test' > zip.sh
echo 'zip test.zip *' >> zip.sh
shell zip.sh

最后,在文章的结尾做一下关于 zip 的科普,知其然知其所以然才能灵活应用不是。

3. zip 命令介绍

在Shell中,zip命令是一个用于压缩文件和目录的工具,它可以将多个文件或目录打包成一个单独的.zip格式压缩文件。这个命令在Linux和Unix-like系统中广泛使用,帮助用户有效地管理和传输数据。

使用zip命令时,用户需要指定压缩文件的名称和要压缩的文件或目录。例如, zip archive.zip file1.txt file2.txt命令会将file1.txtfile2.txt两个文件压缩成名为archive.zip的压缩文件。

如果要压缩整个目录,可以使用-r选项,如zip -r archive.zip directory/

zip命令还支持多种选项,如设置压缩级别添加密码保护等。通过灵活使用这些选项,用户可以根据实际需求定制压缩过程。

zip命令是Shell中非常实用的工具,它能够帮助用户高效地压缩文件和目录,从而节省存储空间并方便数据传输。无论是日常办公还是系统管理,掌握zip命令的使用方法都是非常有益的。

相关推荐
saber_andlibert4 天前
【Linux】Shell脚本
运维·chrome·vscode·编辑器·vim·shell
岚天start10 天前
解决方案—K8S集群的日志按天并按照命名空间分类定时同步到日志服务器
服务器·docker·kubernetes·shell·日志备份
aitav011 天前
⚡ Linux awk 命令全面详解(包括记录、字段、命令空间)
linux·运维·服务器·bash·shell·awk
VincentHe15 天前
当 ServerCat 遇上 Shell 环境变量:一次服务器监控性能优化记录与探索
服务器·shell·监控
虚伪的空想家17 天前
ip网段扫描机器shell脚本
android·linux·网络协议·tcp/ip·shell·脚本·network
谅望者18 天前
Linux文件查看命令完全指南:cat、less、head、tail、grep使用详解
linux·excel·less·shell·文件操作·命令行·系统运维
hello_25020 天前
Shell脚本高效编写技巧
运维·shell
leaf9z21 天前
阿里云ECS在线扩容磁盘
阿里云·云计算·shell
gfdgd xi23 天前
deepin 终端,但是版本是 deepin 15 的
linux·python·架构·ssh·bash·shell·deepin
大米粥哥哥1 个月前
Qt QProcess基于Linux的命令管道符号无效问题【已解决】
linux·qt·shell·qprocess·1024程序员节·管道符号