IT박스

Mac OS X에서 디렉토리 하드 링크 만들기

itboxs 2021. 1. 5. 07:50
반응형

Mac OS X에서 디렉토리 하드 링크 만들기


Mac OS X에서 디렉토리에 대한 하드 링크를 생성하려면 어떻게해야합니까?

이 기능은 Mac OS X v10.5 (Leopard) (타임머신 용) 의 파일 시스템에 추가 되었지만 명령 줄에서 실제로 사용하는 방법에 대한 정보를 찾을 수 없습니다.


불행히도 애플은 ln명령 을 무력화시켰다 . 다음 프로그램을 사용하여 디렉토리에 대한 하드 링크를 만들 수 있습니다.

#include <unistd.h>
#include <stdio.h>

int main(int argc, char* argv[]) {
 if (argc != 3) {
  fprintf(stderr,"Use: hlink <src_dir> <target_dir>\n");
  return 1;
 }
 int ret = link(argv[1],argv[2]);
 if (ret != 0)
  perror("link");
 return ret;
}

하드 링크 된 디렉토리가 동일한 상위 디렉토리에 있지 않을 수 있으므로 다음과 같이 할 수 있습니다.

$ gcc hlink.c -o hlink
$ mkdir child1
$ mkdir parent
$ ./hlink child1 parent/clone2

누구든지 관심이 있다면 Git 저장소에 제안 된 답변을 묶었습니다. https://github.com/selkhateeb/hardlink

설치되면 다음을 사용하여 하드 링크를 만듭니다.

hln source destination

또한 unlink명령이 Mac OS X v10.6 (Snow Leopard)에서 작동하지 않는다는 것을 알았 으므로 연결 해제 옵션을 추가했습니다.

hln -u destination

Hardlink를 설치하려면 Homebrew를 사용 하고 다음을 실행하십시오.

brew install hardlink-osx

연결된 다른 디렉토리의 내용을 제거하지 않고 디렉토리에 대한 하드 링크를 제거하는 방법에 대한 the_undefined의 질문에 대한 답변 : 내가 말할 수있는 한, 내장 명령을 사용하여 명령 줄에서 수행 할 수 없습니다. . 그러나이 작은 프로그램 (Freeman의 포스트에서 영감을 얻음)은 다음을 수행합니다.

#include <unistd.h>
#include <stdio.h>

int main(int argc, char* argv[]) {
    if (argc != 2) {
        fprintf(stderr,"Use: hunlink <dir>\n");
        return 1;
    }
    int ret = unlink(argv[1]);
    if (ret != 0)
        perror("unlink");
    return ret;
}

Freeman의 예를 따르려면

$ gcc hunlink.c -o hunlink
$ echo "foo bar" > child1/baz.txt
$ ./hunlink parent/clone2

parent / clone2에서 하드 링크를 제거하지만 디렉토리 child1와 파일은 그대로 둡니다 child1/baz.txt.


Another solution is to use bindfs https://code.google.com/p/bindfs/ which is installable via port:

sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir

ReferenceURL : https://stackoverflow.com/questions/1432540/creating-directory-hard-links-in-mac-os-x

반응형