Pergunta

Esta pergunta já tem uma resposta aqui:

Como posso criar um link difícil para um diretório no Mac OS X?

Esse recurso foi adicionado ao seu sistema de arquivos em Mac OS X V10.5 (Leopard) (para o Time Machine), mas não consegui encontrar nenhuma informação sobre o uso da linha de comando.

Foi útil?

Solução

Infelizmente a Apple parou o ln comando. Você pode usar o seguinte programa para criar um link difícil para um diretório:

#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;
}

Leve em consideração que os diretórios hard vinculados podem não estar no mesmo diretório pai, para que você possa fazer isso:

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

Outras dicas

Eu acumulei a resposta sugerida em um repositório Git, se alguém estiver interessado: https://github.com/selkhateeb/hardlink

Depois de instalado, crie um link rígido com:

hln source destination

Eu também notei isso unlink O comando não funciona no Mac OS X V10.6 (Snow Leopard), então adicionei uma opção para desvincular:

hln -u destination

Para instalar o hardlink, use Homebrew e corra:

brew install hardlink-osx

Na resposta à pergunta do The_undefined sobre como remover um link rígido para um diretório sem remover o conteúdo de outros diretórios aos quais está ligado: até onde eu sei, isso não pode ser feito da linha de comando usando comandos incorporados . No entanto, este pequeno programa (inspirado no post de Freeman) fará isso:

#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;
}

Para seguir com o exemplo de Freeman,

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

Removerá o hardlink no pai/clone2, mas deixe o diretório child1 e o arquivo child1/baz.txt sozinho.

Outra solução é usar o bindfs https://code.google.com/p/bindfs/ que é instalável via porta:

sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top