OSX에서 파일 압축, 심볼릭 링크를 '해결'


2

나는 많은 디렉토리를 가지고 있으며, 내가 만든 웹 스크립트의 데모이며 중요한 사실은 모두 리소스를 공유한다는 것입니다. 그래서 전역 리소스 디렉토리를 만들고 해당 디렉토리를 각 데모 폴더에 심볼릭 링크했습니다.

내가하고 싶은 것은 각 데모 디렉토리를 .zip파일 로 압축하는 것입니다. 제가 가진 문제는 기호 링크가 zip 파일과 다른 컴퓨터에서 자원 디렉토리가 단순히 존재하지 않는다는 것입니다.

압축을 푼 파일이 표준 파일 구조의 일부인 것처럼 보이도록 심볼릭 링크가있는 데모 폴더를 압축하는 방법이 있습니까?

많은 감사 :-)

답변:


6

몇 가지 질문 : 1) 보관중인 폴더 구조가 내부적으로 기호 링크를 사용하여 공간을 절약합니까? "내부적으로"는 특정 루트 폴더가 주어진 경우 해당 루트 폴더 내의 심볼릭 링크가 해당 폴더 내에있는 다른 파일이나 디렉토리 만 참조합니까?

2) OS X에서 .zip 아카이브를 어떻게 작성합니까? (명령 줄 도구를 사용하고 있으면 도구 유틸리티를 사용하거나 아카이브 유틸리티 등을 사용하여)

3) 대상 컴퓨터 (아카이브 압축이 풀릴 위치)가 어떤 운영 체제에서 실행되고 있으며 파일 압축을 풀기 위해 어떤 방법을 사용하고 있습니까?

우선, OS X에서 기호 링크는 기본적으로 추가 "Mac"정보가있는 일반 텍스트 파일로, 파일을 기호 링크로 취급해야한다는 것을 OS X에 알립니다. 이 추가 Mac 정보는 파일 자체가 아니라 HFS + 디스크 디렉토리에 저장되는 특수 파일 유형, 작성자 코드 및 Finder 플래그 정보입니다.

OS X에서 .zip 파일을 생성 할 때이 추가 Mac 정보를위한 zip 스트림에 공간이 없으므로 어떤 의미에서는 기호 링크가 zip 파일 내에 일반 파일로 저장됩니다. 다른 Mac 사용자가 보관 파일의 압축을 풀고 원래 구조를 올바르게 표시하는지 여부는 압축을 풀 때 사용하는 사람 또는 대상에 따라 달라집니다.

예를 들어 한 달 정도 전에 회사는 Valve의 게임 배포 소프트웨어 인 Steam을 통해 게임을 출시했습니다. 게임 응용 프로그램 번들에는 내부적으로 심볼릭 링크를 사용하는 프레임 워크 형태의 NVIDIA Cg 라이브러리가 포함되었습니다. 이 스레드에서 언급 한 것처럼 Steam이 Trine.app에서 필요한 Mac 정보를 올바르게 복원하지 못하는 문제가있었습니다. http://forums.steampowered.com/forums/showthread.php?t=1556083

아래 이미지는 Cg.framework의 두 가지 사본을 보여줍니다. 하나는 NVIDIA 웹 사이트와 별도로 설치 한 것입니다 (위 이미지). 아래 이미지는 게임에서받은 것을 보여줍니다.

대체 텍스트

모든 항목이 일치하지만 기호 링크 여야하는 것은 일반 데이터 파일입니다.

두 항목 모두에 대한 FSCatalogInfo 레코드를 자세히 살펴보면 문제가 무엇인지 분명했습니다.

대체 텍스트

위 이미지에서 finderInfo 구조체의 시작 부분에 다음과 같은 값이 있음을 알 수 있습니다 :

0x736C6E6B = 'slnk'
0x72686170 = 'rhap'

이 값은 /usr/include/hfs/hfs_format.h에 정의되어 있습니다.

/*
 *  File type and creator for symbolic links
*/
enum {
    kSymLinkFileType  = 0x736C6E6B, /* 'slnk' */
    kSymLinkCreator   = 0x72686170  /* 'rhap' */
};

9 번째 바이트 값 0x80은의 kIsAlias플래그에 해당합니다 finderInfo.finderFlags. 이 값은 /System/Library/Frameworks/CoreServices.framework/.../CarbonCore.framework/.../Headers/Finder.h에 정의되어 있습니다.

enum {
    kIsAlias                      = 0x8000 /* Files only */
};

압축 해제 된 아카이브에서 기호 링크를 나타내는 가능한 파일을 찾고 정보를 적절하게 설정하기 위해 OS X (Archive Utility)에 내장 된 압축 해제 기능이 하드 코딩 된 것 같습니다. /usr/bin/ditto(파일을 보관하는 기능으로 사용했을 때)도 이것을 처리한다고 생각 합니다. 나는 여부를 확실하지 않다 zip거나 unzip않습니다.



3

Zip 도움말은 다음과 같습니다.

-y 심볼릭 링크를 참조 된 파일 대신 링크로 저장합니다.


귀하의 답변에 감사드립니다. 다음 명령을 실행 zip -r -y demo.zip demo/하면 symlink가 디렉토리가 아닌 파일로 나타납니다. 이 파일에는 아이콘이나 파일 유형이 없습니다 : S
Ben Everard

2
@ILMV : 달성하고자 -y하는 것과 정반대 가 아닌가 ?
Daniel Beck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.