몇 가지 질문 : 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
않습니다.
zip -r -y demo.zip demo/
하면 symlink가 디렉토리가 아닌 파일로 나타납니다. 이 파일에는 아이콘이나 파일 유형이 없습니다 : S