Linux
使用終端壓縮未知數量的動態名稱包
我正在嘗試為基於 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