各位大佬好,最近被布置了一个任务,说是要对 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.txt
和file2.txt
两个文件压缩成名为archive.zip
的压缩文件。
如果要压缩整个目录,可以使用-r
选项,如zip -r archive.zip directory/
。
zip
命令还支持多种选项,如设置压缩级别 、添加密码保护等。通过灵活使用这些选项,用户可以根据实际需求定制压缩过程。
zip
命令是Shell中非常实用的工具,它能够帮助用户高效地压缩文件和目录,从而节省存储空间并方便数据传输。无论是日常办公还是系统管理,掌握zip
命令的使用方法都是非常有益的。