前端在 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命令的使用方法都是非常有益的。

相关推荐
彭泽布衣2 天前
为什么 mac os .bashrc 没有自动加载?
shell·mac os
Johny_Zhao2 天前
Ubuntu安装部署Zabbix网络监控平台和设备配置添加
linux·网络·mysql·网络安全·信息安全·云计算·apache·zabbix·shell·yum源·系统运维·itsm
嘿嘻哈呀2 天前
命令行解释器中shell、bash和zsh的区别
bash·shell·zsh·命令行解释器
Johny_Zhao3 天前
K8S+nginx+MYSQL+TOMCAT高可用架构企业自建网站
linux·网络·mysql·nginx·网络安全·信息安全·tomcat·云计算·shell·yum源·系统运维·itsm
Johny_Zhao5 天前
思科安全大模型SOC作业应用分析
linux·网络·人工智能·网络安全·ai·信息安全·云计算·shell·devops·cisco·yum源·系统运维·itsm
Johny_Zhao9 天前
阿里云Ansible自动化运维平台部署
linux·人工智能·ai·信息安全·云计算·ansible·shell·yum源·系统运维·itsm
一刀到底21111 天前
从实列中学习linux shell12 通过Shell脚本来优化MySQL数据库性能,特别是慢SQL跟踪和索引优化
linux·数据库·shell
一刀到底21112 天前
从实列中学习linux shell9 如何确认 服务器反应迟钝是因为cpu还是 硬盘io 到底是那个程序引起的。cpu负载多高算高
linux·服务器·shell
Johny_Zhao12 天前
Oracle、MySQL、SQL Server、PostgreSQL、Redis 五大数据库的区别
linux·redis·sql·mysql·信息安全·oracle·云计算·shell·yum源·系统运维
Johny_Zhao13 天前
在Ubuntu Server上安装Checkmk监控系统
linux·人工智能·网络安全·信息安全·云计算·shell·yum源·系统运维·checkmk