使用终端压缩未知数量的具有动态名称的包

使用终端压缩未知数量的具有动态名称的包

我正在尝试为基于 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

相关内容