我正在尝试为基于 UNIX 的系统(maxOS、Linux)找到一种解决方案来压缩未知数量的软件包,理想情况下不需要用户安装任何额外的第三方软件。
我有这样的文件夹结构
MyProject
/packages
/custom-modules
/Module1
/ios
/src
/Module2
/ios
/src
...
自定义模块的数量及其名称可能会有所不同。我现在需要一个解决方案,允许我压缩所有模块src
文件夹并相应地命名它们,即最终输出如下所示
MyProject
/packages
/custom-modules
/Module1
/ios
/src
/Module1.zip
/Module2
/ios
/src
/Module2.zip
...
理想情况下,每次运行此类命令/脚本时,它都会删除旧的已存在的 zip 文件并生成新的文件。
答案1
从MyProject/packages/custom-modules
目录开始,这一行就可以完成这项工作:
for module in * ; do cd "$module/ios/" && zip -qr "$module.zip" src/ && cd - &> /dev/null ; done
这里的想法是使用通配符/glob 获取所有模块目录名称。然后,对于每个目录,更改为“ios”子目录并运行 zip 命令。可以zip
直接执行该命令,但这将包括存档中的扩展路径,这是您可能不想要的。最后,跳回父目录,继续下一次迭代。
这是一个演示。这是原来的目录结构:
[haxiel@testvm1 custom-modules]$ tree
.
├── Module1
│ └── ios
│ └── src
│ ├── file1
│ └── file2
└── Module2
└── ios
└── src
├── file1
└── file2
6 directories, 4 files
现在我们运行命令:
[haxiel@testvm1 custom-modules]$ for module in * ; do cd "$module/ios/" && zip -qr "$module.zip" src/ && cd - &> /dev/null ; done
最终的目录结构是这样的:
[haxiel@testvm1 custom-modules]$ tree
.
├── Module1
│ └── ios
│ ├── Module1.zip
│ └── src
│ ├── file1
│ └── file2
└── Module2
└── ios
├── Module2.zip
└── src
├── file1
└── file2
6 directories, 6 files
这是一个显示其内容的示例 ZIP 文件:
[haxiel@testvm1 custom-modules]$ unzip -l Module1/ios/Module1.zip
Archive: Module1/ios/Module1.zip
Length Date Time Name
--------- ---------- ----- ----
0 03-16-2019 20:42 src/
0 03-16-2019 20:42 src/file1
0 03-16-2019 20:42 src/file2
--------- -------
0 3 files