
나는 다수의 디렉토리를 가지고 있는데 그것들은 모두 내가 만든 웹 스크립트의 데모입니다. 중요한 사실은 그것들이 모두 리소스를 공유한다는 것입니다. 그래서 전역 리소스 디렉터리를 만들고 해당 디렉터리를 각 데모 폴더에 기호적으로 연결했습니다.
내가 원하는 것은 각 데모 디렉토리를 파일로 압축하는 것입니다 .zip
. 문제는 심볼릭 링크가 zip 파일에 유지되고 다른 시스템에서는 리소스 디렉토리가 존재하지 않는다는 것입니다.
압축을 풀면 파일이 표준 파일 구조의 일부인 것처럼 나타나도록 기호 링크가 해결된 데모 폴더를 압축하는 방법이 있습니까?
많은 감사드립니다 :-)
답변1
몇 가지 질문: 1) 보관 중인 폴더 구조가 공간을 절약하기 위해 내부적으로 심볼릭 링크를 사용합니까? ("내부적으로"란 특정 루트 폴더가 주어지면 해당 루트 폴더 내의 심볼릭 링크가 해당 폴더 내에 있는 다른 파일이나 디렉터리만 참조한다는 의미입니다.)
2) OS X에서 .zip 아카이브를 어떻게 생성합니까? (명령줄 도구 사용, 그렇다면 어떤 도구 사용, 또는 아카이브 유틸리티 사용 등)
3) 대상 컴퓨터(아카이브의 압축이 풀릴 대상)가 실행 중인 운영 체제는 무엇이며, 거기에서 파일의 압축을 풀기 위해 어떤 방법을 사용하고 있습니까?
우선, OS X에서 심볼릭 링크는 기본적으로 파일을 심볼릭 링크로 처리해야 함을 OS X에 알리는 추가 "Mac" 정보가 포함된 일반 텍스트 파일입니다. 이 추가 Mac 정보는 파일 자체가 아닌 HFS+ 디스크 디렉토리에 저장되는 특수 파일 유형, 작성자 코드 및 Finder 플래그 정보입니다.
OS X에서는 .zip 파일을 생성하면 zip 스트림에 이 추가 Mac 정보를 저장할 공간이 없으므로 어떤 의미에서는 심볼릭 링크가 zip 파일 내에 일반 파일로 저장됩니다. 다른 Mac의 누군가가 아카이브의 압축을 풀 수 있고 원본 구조를 적절하게 나타낼 수 있는지 여부는 압축을 풀기 위해 누구 또는 무엇을 사용하는지에 따라 달라집니다.
예를 들어, 한 달 정도 전에 한 회사에서 Valve의 게임 배포 소프트웨어인 Steam을 통해 게임을 출시했습니다. 게임 애플리케이션 번들에는 내부적으로 심볼릭 링크를 사용하는 프레임워크 형태의 NVIDIA Cg 라이브러리가 포함되어 있습니다. 원래 이 스레드에서 언급한 대로 Steam에서 Trine.app에 필요한 Mac 정보를 제대로 복원하지 못하는 문제가 있었습니다. http://forums.steampowered.com/forums/showthread.php?t=1556083
아래 이미지는 Cg.framework의 2가지 사본을 보여줍니다. 하나는 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(아카이브 유틸리티)에 내장된 압축 해제 기능은 압축이 풀린 아카이브에서 기호 링크를 나타내는 가능한 파일을 찾고 정보를 적절하게 설정하도록 하드 코딩된 것으로 보입니다. 나는 /usr/bin/ditto
(파일 보관 기능을 위해 사용될 때) 이 문제도 해결해 줄 것이라고 믿습니다 . 나는 확실 zip
하지 않습니다 unzip
.
답변2
이는 Info-ZIP의 기본 동작입니다 zip
. 대신 아카이브 내에 심볼릭 링크를 저장하려면 -y
또는 를 전달해야 합니다 .--symlinks
답변3
Zip 도움말은 다음과 같습니다.
-y 참조 파일 대신 심볼릭 링크를 링크로 저장합니다.