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

相关推荐
dingdingfish1 天前
GNU Parallel 学习 - 第1章:How to read this book
bash·shell·gnu·parallel
似霰4 天前
Linux Shell 脚本编程——核心基础语法
linux·shell
似霰5 天前
Linux Shell 脚本编程——脚本自动化基础
linux·自动化·shell
偷学技术的梁胖胖yo6 天前
Shell脚本中连接数据库查询数据报错 “No such file or directory“以及函数传参数组
linux·mysql·shell
纵有疾風起15 天前
【Linux 系统开发】基础开发工具详解:软件包管理器、编辑器。编译器开发实战
linux·服务器·开发语言·经验分享·bash·shell
gis分享者17 天前
Shell 脚本中如何使用 here document 实现多行文本输入? (中等)
shell·脚本·document·多行·文本输入·here
柏木乃一17 天前
基础IO(上)
linux·服务器·c语言·c++·shell
angushine17 天前
CPU脚本并远程部署
shell
赵民勇22 天前
Linux/Unix中install命令全面用法解析
linux·shell
gis分享者23 天前
Shell 脚本中如何使用 trap 命令捕捉和处理信号(中等)
shell·脚本·信号·处理·trap·捕捉