Pergunta

Como criar um hardlink (em oposição a um link simbólico ou um Mac OS alias) no mac OS X, que aponta para um diretório?Eu já sei o comando "ln destino", mas que só funciona quando o destino é um arquivo.Eu sei que o Mac OS, ao contrário de outros ambientes Unix, permite hardlinking para pastas (isto é usado para a Máquina do Tempo, por exemplo), mas eu não sei como fazer isso sozinho.

Foi útil?

Solução 2

Você não pode fazê-lo diretamente no BASH, então.No entanto...Eu encontrei um artigo que explica como fazê-lo indiretamente: http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html compilando um pequeno e simples programa em C:

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

int main(int argc, char *argv[])
{
   if (argc != 3) return 1;

   int ret = link(argv[1], argv[2]);

   if (ret != 0) perror("link");

   return ret;
}

...e construir no Terminal.aplicativo com:

$ gcc -o hlink hlink.c -Wall

Outras dicas

Eu concordo que é difícil-a vinculação de pastas/diretórios podem causar problemas se não tomar cuidado, mas eles têm uma vantagem definitiva - Máquina do Tempo é um exemplo perfeito.Sem eles, isso simplesmente não seria prático como a duplicação da redundantes versões de arquivos muito rapidamente consumir, mesmo o maior dos discos.

O Snow Leopard pode criar hard links para diretórios, desde que você siga Amit Singh seis regras:

  1. O sistema de arquivos deve ser registrado no diário HFS+.
  2. O pai diretórios de origem e de destino deve ser diferente.
  3. A origem do pai não deve ser o diretório raiz.
  4. O destino não deve estar no diretório raiz.
  5. O destino não deve ser um descendente de origem.
  6. O destino não deve ter qualquer antepassado que é um diretório de link de disco rígido.

Por isso não é correto em tudo que o Snow Leopard tem perdido a capacidade de criar links de disco rígido para pastas.

Eu só verificado que vincular/desvincular fazer um trabalho sobre o Snow Leopard - contanto que você siga as seis regras.Eu apenas tentei-lo e ele funciona muito bem no meu Snow Leopard 10.6.6 sistema - tentei no volume de inicialização e em um USB separado de volume externo e ele funcionou bem em ambos os casos.

Aqui é o "hunlink.c" do programa:

#include <stdio.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
   if (argc != 2)
      return 1;
   int ret = unlink(argv[1]);
   if (ret != 0)
      perror("unlink");
   return ret;
}

gcc -o hunlink hunlink.c

Então, cuidado se você tentar isso, lembre - se de seguir as regras e usar hlink para criar esses links de disco rígido e usar hunlink para remover o disco rígido link a seguir.E não se esqueça de documento o que você fez para mais tarde ou para alguém que possa precisar saber isso.

Uma outra "pegadinha" que eu aprendi sobre esses "hard links" para as pastas.Quando você criá-los, não há realmente muito o que acontece "por trás da cortina" do Mac OS X.Um assunto realmente importante é que a pasta que você criar o link é realmente mudou-se para um super-mágico super-pasta oculta chamada /.HFS+ Privada de Dados de Directório%000d/dir_xxx onde xxx é o número de inode do "source_folder" - lembre-se de que o formato do comando é

hlink source_folder target_folder

Então, devido a isso, você tem que ter cuidado de não ter quaisquer arquivos abertos no "source_folder" porque se o fizer, eles acabaram de se mudou para o super-pasta mágica e você provavelmente vai ter um problema se você tentar salvar as alterações para os arquivos que foram abertos no "source_folder".Isso aconteceu comigo algumas vezes até que me dei conta do que estava acontecendo e a solução é bastante simples.Eu notei que você não poderia fazer um "ls -la" comando por mais tempo sem ficar engraçado erros para todas as pastas/diretórios que estavam no original "source_folder" mas você poderia fazer um comando "ls" e tudo parecia bem.

Se você executar "Verificar disco" em "Utilitário de Disco" do programa, você vai notar que ele, provavelmente, reclama e dá um "bitmap de Volume precisa de pequenas reparações para órfãos blocos", que é o que aconteceu com a criação da super-pasta mágica e o movimento das "source_folder" para ele.

Se você encontrar-se nesta situação com "órfãos blocos", primeiro salve os arquivos alterados para algum outro local temporário não no volume que contém o "source_folder" árvore e, em seguida, usar o "Utilitário de Disco" para desmontar e remontar o volume que contém o "source_folder" ou apenas reiniciar o computador.Em seguida, copie os arquivos que você salvou para os locais temporários de volta para seus locais originais e você deve estar de volta no negócio.Isso é o que funcionou para mim, então não posso garantir que isso vai funcionar para você também.Então, pode ser uma boa idéia tentar um volume de você ter um bom backup, apenas no caso.

Parece muito estranho que toda esta sobrecarga ocorre apenas para a simples tarefa de criar um hard link para uma pasta.Alguém tem alguma idéia de por que o Mac OS X vai para todo esse esforço para este link de disco rígido criação de pastas?Tem algo a ver com o fato de que este é um "diário" de sistema de arquivo?

Eu descobri que as informações sobre a super-mágico, super-local escondido pela leitura Amit Singh explicação de sua "hfsdebug" utilitário.Se você quiser mais detalhes, consulte o seu web site Amit Singh hfsdebug utilitário.É bastante interessante a parte do software e vai contar muitos detalhes sobre o sistema de arquivos HFS+.É grátis e eu recomendo que você baixe e experimente.Ele não é mais suportado, mas ele ainda funciona no Snow Leopard e o Leopardo - basicamente, qualquer HFS+ com suporte do sistema.Você realmente não pode fazer nenhum mal com ele, como "só de leitura" ferramenta - por isso é ótimo para usar para olhar para alguns detalhes do sistema de arquivos.

Um problema mais sobre estes "links de disco rígido para as pastas" - uma vez que você criar um e o super-mágico super-secreto-pasta oculta é criado, ele está lá para o bem.Mesmo se você desligar a pasta que causou a ser criado em primeiro lugar, esta magia pasta fica em torno de.Não sei por que, mas ele definitivamente não.Você pode usar "hfsdebug" para descobrir isso se você quiser experimentá-lo.Você também pode usar "hfsdebug" para saber quantos desses "links de disco rígido para as pastas" existem em uma unidade.Para estes detalhes, consulte Aproximar artigo sobre o "hfsdebug" utilitário.

Ele também tem outro mais recente do utilitário de suporte, mas os custos.É chamado de fileXray e custa r $79 para uma pessoa em qualquer número de computadores no mesmo agregado familiar para o pessoal não-business tipo de licença.Ele tem uma extensa 173-página Guia do Usuário que você pode baixar para ver o que ele pode fazer antes de comprar.Infelizmente, não há versão trial, então leia o manual de instruções e confira o site para mais detalhes para ver se ele pode ajudar você a sair de uma enrascada.Saiba todos os detalhes sobre ele em seu web site - consulte fileXray site para obter mais informações.

Há um par de questões que você deve estar ciente de quando usando estes links de disco rígido para as pastas.Se o volume que eles são criados em está montado para um cliente remoto, pode haver problemas significativos, dependendo de como eles são montados.Se você usar a AFP para montar o volume para um cliente remoto, há grandes problemas como qualquer pasta que actualmente tem um disco rígido de um link para ele ou já teve um, mas mais tarde removido, será incapaz de ser usado como todas as pastas de nível inferiores (mas não de arquivos) será acessível a partir do Finder ou uma janela de Terminal.Se você tentar fazer um simples "ls -lR" comando, ele irá falhar e dar "ls:xxx:Não existe tal arquivo ou diretório" mensagens de erro para todas as pastas de nível inferiores.Se você usar uma janela do Finder para percorrer a árvore de diretório do volume remoto, as pastas que estão na pasta que tinha ou tem um link para ele irá simplesmente desaparecer, sem qualquer erro quando você clicar no nome da pasta.

Estes problemas não parecem ocorrer (exceto para a mensagem de erro) se você utilizar o NFS para montar o cliente remoto (e supondo que você tinha de um servidor de NFS no sistema que possui o volume como um local de sistema de arquivos HFS+).Os detalhes sobre como utilizar o NFS para montar volumes não são fornecidos aqui.Eu usei um bom programa de Dr.Marcel Bresink chamado de "NFS" Gerenciador para ajudar com os mounts NFS no servidor e no cliente.Você pode obtê-lo a partir do seu site - basta procurar por "Bresink NFS Manager" no seu motor de busca favorito, mas ele tem uma versão de teste grátis, assim você pode experimentar antes de comprar.Não é grande coisa, se você quer aprender como fazer as montagens de NFS são, mas o "NFS" Gestor torna-o muito fácil de definir as coisas e para ajustar as diversas definições para ajudar a otimizar a ele.Ele tem vários outros arrumado Mac OS X utilitários, também, que são muito razoáveis - um chamado "Hardware Monitor" que permite que você monitore e gráficos de todos os tipos de coisas, como o uso de energia, temperatura da CPU, velocidade de fãs e muitas outras variáveis, tanto para o local remoto e de sistemas Mac por longos períodos de tempo (de minutos a dias).Definitivamente vale a pena conferir se você está em utilitários.

Uma coisa que eu notei é que o NFS transferências de arquivos foi de cerca de 20% mais lento do que fazê-los AFP via, mas o seu "milhagem pode variar", assim não há garantias de um jeito ou de outro, mas eu prefiro algo que funciona mesmo se eu tiver que pagar 20% de queda de desempenho, comparado com ter nada de funcionar em tudo.

A Apple está ciente dos problemas com links de disco rígido e remoto AFP sistemas de arquivos, e eles se referem a ele como um "implentation limitação" do cliente AFP - eu prefiro chamar-lhe o que realmente me parece ser UM BUG!!!Só espero que a próxima versão do Mac OS X corrige o problema, como eu realmente gostaria de ter a capacidade para utilizar hard links para pastas quando faz sentido.

Estas notas são a minha opinião pessoal e eu não oferece qualquer garantia sobre a sua veracidade, para usá-los em seu próprio risco.Tem um bom backup antes de brincar com esses "links de disco rígido para as pastas" apenas no caso de algum imprevisto acontece.Mas eu espero que você divirta-se se você decidir fazer para olhar um pouco mais para este interessante aspecto do Mac OS X.

Piffle.Em 10.5, ele diz a você na página de manual para ln:

   -d, -F, --directory
          allow the superuser to attempt to hard link  directories  (note:
          will  probably  fail  due  to  system restrictions, even for the
          superuser)

Então, sim:

    sudo  ln  -d  existing_dir  new_hard_link

Dê a ele a sua palavra-passe, e você não está feito ainda.Você não tinha documento, não é?Você deve documento de disco rígido vinculado diretórios;mesmo se tratando de uma única máquina do usuário.

A exclusão é uma história diferente:se você ir sobre ele de maneira usual para apagar diretórios, você vai excluir o conteúdo.Para você deve "desvincular" o diretório:

    unlink  new_hard_link

Não.Espero que você não abra o seu sistema de ficheiros!

Cross-posting esta excelente ferramenta que ordenadamente resolve o problema, postado originalmente por Sam:


Para instalar o Hardlink, garantir que você tenha instalado homebrew, e , em seguida, execute:

brew install hardlink-osx

Uma vez instalado, crie um link de disco rígido com:

hln [source] [destination]

Eu também notei que unlink comando não funciona no snow leopard, então eu adicionei uma opção para desligar:

hln -u destination

O código está disponível no Github para quem estiver interessado: https://github.com/selkhateeb/hardlink

Sim, é suportado pelo kernel e o sistema de arquivos, mas desde que ele não é destinado para uso geral não é exposto para o shell.

Você provavelmente poderia descobrir qual a APIs Máquina do Tempo usa e envolvê-los em uma ferramenta de linha de comando, mas seria melhor tomar a dica e orientar bem claro.

A versão do OSX ln não é possível fazê-lo, mas, como mencionado na outra resposta rico, é possível com a versão GNU do ln que está disponível em homebrew como gln como parte do coreutils fórmula. man gln lista os -d opção com o OSX-aviso específico fornecido em rico's respostas.Em outras palavras, ele não funciona em todos os casos.O que exatamente determina se ele funciona ou não, não parece ser documentado em qualquer lugar.

Como pré-requisito para instalar coreutils:

    brew install coreutils

Agora você pode fazer:

    sudo gln -d /original_folder /mirror_folder

IMPORTANTE:Para remover o disco rígido link deve utilização gunlink:

    sudo gunlink /mirror_folder

Usando rm ou Finder irá também eliminar a pasta original.

FYI:O coreutils homebrew fórmula fornece o GNU compatível com versões do unix genérico ferramentas.Utilização brew list coreutils para ver a lista completa.

O meu caso foi que eu descobri que a partir de uma máquina virtual de windows, eu não posso seguir links simbólicos.(eu queria testar algumas páginas HTML no Internet Explorer).E minha estrutura de diretórios tinham links simbólicos para CSS e imagens de pastas.

A minha solução para resolver o problema foi uma abordagem diferente do que as outras respostas implícitas.Eu usei rsync para criar uma cópia da pasta.O Rsync pode resolver os links simbólicos e copiar os arquivos vinculados no lugar.

Isso resolveu o meu problema sem o uso de links de disco rígido para diretórios.E é, na verdade, uma solução fácil, se você está apenas trabalhando em um pequeno conjunto de arquivos.

rsync -av --copy-dirlinks --delete ../htmlguide ~/src/

Como de 2018 não é mais possível.APFS (introduzida no MacOS Serra Alta 10.13) não é compatível com o diretório hardlinks.Ver https://github.com/selkhateeb/hardlink/issues/31

A resposta curta é que você não pode.:) (exceto, possivelmente, como root, quando seria mais exato dizer que você não deve.)

Unixes apenas permitir que um número de conjunto de links para diretórios - ".." a partir de dentro, todos os seus filhos e "." a partir de dentro de si.A coisa é, potencialmente, uma receita muito confuso árvore de diretório.Isto é/foi, aparentemente, uma decisão de design por Ken Thompson.

(Tendo dito que, aparentemente, o Time Machine da Apple não fazer isso :) )

A partir do artigo ligada, você vai ter que erro se você tentar criar o link de disco rígido no mesmo diretório como o original.Você tem que criá-lo em outro lugar.

Isso também pode ser feito com construído-em Perl (a partir do Terminal) sem compilar nada.O meu caso de uso é para o Google Drive (que não oferece suporte a links simbólicos), para que os exemplos abaixo refletem o caso de uso.

Para associar a sua pasta "Documentos" para o Google Drive, então é sincronizado:

perl -e 'link "/Users/me/Documents", "/Users/me/Google Drive/Documents"'

Para remover o link para a sua pasta "Documentos" do Google Drive:

sudo perl -U -e 'unlink "/Users/me/Google Drive/Documents"'

Você precisa de "root" para desvincular (ver "desvincular" perldoc).

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

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

no caso, não há pasta de sub-rotina, você pode tentar

ln folder_path/*.* target_folder

ele trabalhou para mim no os X 10.9

No Linux você pode usar ligar a montagem para simular rígido ligando diretórios.Não tenho certeza sobre OSX

sudo mount --bind /some/existing_real_contents /else/dummy_but_existing_directory
sudo umount /else/dummy_but_existing_directory
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top