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