저는 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