macos - simbolico - links simbólicos
¿Crear enlaces duros de directorio en MacOS X? (4)
En respuesta a la pregunta de the_undefined sobre cómo eliminar un enlace fijo a un directorio sin eliminar los contenidos de otros directorios a los que está vinculado: Por lo que puedo decir, no se puede hacer desde la línea de comandos utilizando comandos integrados. 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 fijo en parent / clone2, pero dejará el directorio child1 y el archivo child1 / baz.txt solo.
Esta pregunta ya tiene una respuesta aquí:
¿Cómo puedo crear un enlace fijo a un directorio en OSX?
Esta característica se ha agregado a su sistema de archivos en 10.5 (para la máquina del tiempo), pero no pude encontrar ninguna información sobre su uso desde la línea de comandos.
He incluido la respuesta sugerida en un representante de git si alguien está interesado: https://github.com/selkhateeb/hardlink
Una vez instalado, crea un enlace fijo con:
hln source destination
También noté que el comando de unlink
no funciona en el leopardo de las nieves, por lo que agregué una opción para desvincularme:
hln -u destination
Para instalar Hardlink, use homebrew y ejecute:
brew install hardlink-osx
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
Desafortunadamente, Apple ha paralizado el comando ln
. Puede usar el siguiente programa para crear un enlace fijo 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 no pueden 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