Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

¿Cómo puedo crear un enlace duro a un directorio en Mac & nbsp; OS & nbsp; X?

Esta función se ha agregado a su sistema de archivos en Mac & nbsp; OS & nbsp; X & nbsp; v10.5 (Leopard) (para máquina del tiempo), pero no pude encontrar ninguna información sobre cómo usarlo desde la línea de comandos.

¿Fue útil?

Solución

Desafortunadamente, Apple ha paralizado el comando ln . Puede usar el siguiente programa para crear un enlace rígido a un directorio:

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

Tenga en cuenta que los directorios vinculados pueden no estar en el mismo directorio principal, por lo que puede hacer esto:

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

Otros consejos

He incluido la respuesta sugerida en un repositorio de Git si alguien está interesado: https://github.com / selkhateeb / hardlink

Una vez instalado, cree un enlace duro con:

hln source destination

También noté que el comando unlink no funciona en Mac & nbsp; OS & nbsp; X & nbsp; v10.6 (Snow & nbsp; Leopard), así que agregué una opción para desvincular:

hln -u destination

Para instalar Hardlink, use Homebrew y ejecute:

brew install hardlink-osx

En la respuesta a la pregunta de the_undefined acerca de cómo eliminar un enlace rígido a un directorio sin eliminar el contenido de otros directorios a los que está vinculado: Por lo que puedo decir, no se puede hacer desde la línea de comandos usando comandos incorporados. Sin embargo, este pequeño programa (inspirado en la publicación de Freeman) lo hará:

#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 con el ejemplo de Freeman,

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

eliminará el enlace duro en parent / clone2, pero dejará solo el directorio child1 y el archivo child1 / baz.txt .

Otra solución es usar bindfs https://code.google.com/p/bindfs/ que se puede instalar a través del puerto:

sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top