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

相关推荐
牛奶咖啡132 天前
shell脚本编程(一)
linux·shell·shell脚本·shell脚本解析·grep命令语法·grep选项详解·正则表达式解析
gis分享者4 天前
请解释 Shell 脚本中的重定向(redirection)操作及其用途(中等)
shell·脚本·重定向·操作·用途·redirection
我是koten4 天前
K8s启动pod失败,日志报非法的Jar包排查思路(Invalid or corrupt jarfile /app/xxxx,jar)
java·docker·容器·kubernetes·bash·jar·shell
Huazzi.6 天前
PowerShell 配置以及使用指南
windows·git·编辑器·shell·powershell·效率
赵民勇7 天前
cut命令详解
linux·shell
赵民勇7 天前
join命令使用指南与技巧
linux·shell
赵民勇7 天前
tr命令用法详解与技巧总结
linux·shell
赵民勇7 天前
paste命令用法详解
linux·shell
____xl8 天前
终端环境:zsh、oh-my-zsh与 7 个效率插件
shell
赵民勇8 天前
awk用法与技巧详解
linux·shell