일부 심볼릭 링크는 유지하면서 다른 심볼릭 링크는 유지하지 않고 아카이브를 압축하는 방법은 무엇입니까? (OS X)

일부 심볼릭 링크는 유지하면서 다른 심볼릭 링크는 유지하지 않고 아카이브를 압축하는 방법은 무엇입니까? (OS X)

저는 OS X에서 zip 명령줄 도구를 사용하여 Xcode 프로젝트 폴더를 압축하고 있습니다.

해당 폴더에는 xx.framework/Versions/Current. xx.framework/Versions/A프로젝트를 압축한 다음 압축을 풀면 Versions/A와 Versions/Current 모두 동일한 파일 세트를 포함합니다. 기본적으로 두 파일은 아카이브에 두 번 포함됩니다. 이를 방지해야 합니다.

그러나 프로젝트 폴더에는 zip 아카이브에 복사해야 하는 리소스 파일을 가리키는 심볼릭 링크도 있습니다. 따라서 가리키는 파일/디렉토리가 아닌 심볼릭 링크를 저장하기 위해 전역 zip 플래그를 사용할 수는 없습니다.

특정 심볼릭 링크만 저장되고 다른 심볼릭 링크는 해당 심볼릭 링크가 가리키는 콘텐츠를 저장하는 단일 ZIP 파일을 어떻게 만들 수 있습니까?

zip으로도 가능한가요? 사용할 수 있는 다른 zip 호환 도구가 있습니까? 원하는 결과를 얻기 위해 파일을 동일한 아카이브에 저장하는 동안 특정 파일을 제외/포함하여 zip 명령을 여러 번 실행할 수 있습니까?

추신: 지퍼 안에 지퍼를 넣을 수 없습니다. 압축을 푼 후에는 프로젝트를 사용할 수 있어야 하며 포함된 zip의 압축을 풀 필요가 없습니다.


내가 시도한 것들:

zip -rq4y $ZIPFILE $TARGETFOLDER/xx.framework
zip -rq4u $ZIPFILE $TARGETFOLDER

아이디어는 심볼릭 링크를 유지하면서 .framework를 먼저 압축하는 것이었습니다. 그런 다음 아카이브를 업데이트하여 아직 아카이브에 없는 심볼릭 링크가 가리키는 파일/폴더를 포함하여 나머지 파일을 추가합니다. 결과: 손상된 아카이브(오류 20 - 디렉터리가 아님).

또한 첫 번째 단계에서 프레임워크를 제외하고 프레임워크로 아카이브를 업데이트하는 반대의 시도도 시도했습니다.

zip -rq4 $ZIPFILE $TARGETFOLDER -x xx.framework
zip -rq4uy $ZIPFILE $TARGETFOLDER

결과: 손상된 아카이브(오류 21 - 디렉토리임).

답변1

알았어!

한 가지 문제는 앞뒤에 별표가 있는 잘못된 제외 형식을 사용했다는 것입니다. 이 솔루션은 작동합니다.

zip -rq4 $ZIPFILE $TARGETFOLDER -x *xx.framework*
zip -rq4uy $ZIPFILE $TARGETFOLDER -i *xx.framework*

따라서 먼저 프레임워크를 제외한 폴더를 압축하여 모든 심볼릭 링크된 파일/폴더를 아카이브에 복사합니다.

y두 번째 줄은 플래그(지정된 파일/폴더가 아닌 심볼릭 링크 저장) 로 아카이브를 업데이트합니다 . 명시적으로 프레임워크 폴더만 포함합니다. 이것이 필요하지 않을 수도 있지만 더 깨끗하고 빠르다고 생각합니다.

관련 정보