Linux

使用終端壓縮未知數量的動態名稱包

  • March 16, 2019

我正在嘗試為基於 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 文件並生成新文件。

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

引用自:https://unix.stackexchange.com/questions/506682