Pregunta

¿Cómo crear un vínculo permanente (a diferencia de un enlace o un Mac OS alias) en OS X que apunta a un directorio?Ya sé que el comando "ln destino", pero que sólo funciona cuando el destino es un archivo.Sé que Mac OS, a diferencia de otros entornos Unix, permite hardlinking a las carpetas (este se utiliza para la Máquina del Tiempo, por ejemplo), pero no sé cómo hacerlo yo mismo.

¿Fue útil?

Solución 2

No se puede hacer directamente en BASH entonces.Sin embargo...He encontrado un artículo que explica cómo hacerlo indirectamente: http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html mediante la compilación de un pequeño y sencillo programa en 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;
}

...y construir en la Terminal.aplicación con:

$ gcc -o hlink hlink.c -Wall

Otros consejos

Estoy de acuerdo en que duro la vinculación de carpetas/directorios pueden causar problemas si no se tiene cuidado, pero tienen una ventaja definitiva - de la Máquina del Tiempo es un ejemplo perfecto.Sin ellos simplemente no sería práctico como la duplicación de la redundantes versiones de archivos muy rápidamente consumir incluso el más grande de los discos.

Snow Leopard puede crear enlaces duros a los directorios siempre y cuando siga Amit Singh seis reglas:

  1. El sistema de archivo debe ser diario HFS+.
  2. El padre de los directorios de origen y destino deben ser diferentes.
  3. La fuente de los padres no debe ser el directorio raíz.
  4. El destino no debe estar en el directorio raíz.
  5. El destino no debe ser un descendiente de la fuente.
  6. El destino no debe tener ningún antepasado que es un directorio de enlaces duros.

Así que no es correcto en todo lo que Snow Leopard ha perdido la capacidad de crear enlaces duros las carpetas.

Me acaba de verificarse que vincular/desvincular hacer el trabajo en Snow Leopard - siempre y cuando usted siga las seis reglas.Yo sólo lo he probado y funciona bien en mi Snow Leopard 10.6.6 sistema probado en el volumen de inicio y en un USB externo de volumen y funcionó bien en ambos casos.

Aquí está el "hunlink.c" del 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

Así que tenga cuidado si usted intenta - recuerda seguir las reglas y el uso hlink para crear estos enlaces duros y uso hunlink para quitar el enlace duro después.Y no te olvides de documento lo que has hecho para más tarde o para alguien que necesite saber esto.

Otro "problema" que me acaba de aprender acerca de estos "vínculos fuertes" a las carpetas.Cuando usted cree en ellos no hay realmente un montón que sucede "detrás de la cortina" de Mac OS X.Una cuestión realmente importante es que la carpeta de crear el vínculo es realmente mueve a una super-mágico super-carpeta oculta llamada /.HFS+ Privado los Datos del Directorio%000d/dir_xxx donde xxx es el número de inodo de la "source_folder" - recuerde que el formato del comando es

hlink source_folder target_folder

Así que debido a esto, usted tiene que tener cuidado de no disponer de los archivos abiertos en el "source_folder" porque si no, se acaba trasladó a la super-mágico carpeta y es probable que tenga un problema si se intenta guardar los cambios a los archivos que se han abierto en el "source_folder".Esto me ha pasado un par de veces hasta que me di cuenta de lo que estaba sucediendo, y la solución es bastante simple.Me di cuenta de que no se podía hacer un "ls-la" comando más sin llegar errores graciosas para todas las carpetas/directorios que estaban en el original "source_folder" pero se puede hacer un "ls" comando y todo parecía bien.

Si ejecuta "Comprobar disco" en la "Utilidad de Discos" del programa, se observa que, probablemente, se queja y le da un "mapa de bits del Volumen de las necesidades de reparación de menor importancia para los huérfanos de los bloques", que es lo sucedido con la creación de la super-mágico de la carpeta y el movimiento de la "source_folder" a ella.

Si usted se encuentra en esta situación con los "huérfanos de bloques", primer guardar los archivos modificados en alguna otra ubicación temporal no en el volumen que contiene el "source_folder" árbol, a continuación, utilizar la "Utilidad de Discos" desmontar y volver a montar el volumen que contiene el "source_folder" o simplemente reinicie el equipo.A continuación, copie los archivos que se guardan en los lugares temporales volver a su ubicación original y usted debe estar de vuelta en los negocios.Esto es lo que ha funcionado para mí, así que no puedo garantizar que esto funcionará para usted también.Por lo que podría ser una buena idea para probar esto en un volumen que tenga una buena copia de seguridad por si acaso.

Me parece muy muy raro que toda esta sobrecarga se produce por el simple tarea de crear un enlace duro a una carpeta.¿Alguien tiene alguna idea de por qué Mac OS X va a todo este esfuerzo para que este duro creación de enlaces a las carpetas?¿Tiene algo que ver con el hecho de que este es un "diario" del sistema de archivos?

Descubrí la información acerca de la super-mágico, super-ubicación oculta por la lectura Amit Singh explicación de su "hfsdebug de utilidad".Si desea obtener más detalles, consulte su sitio web en Amit Singh hfsdebug utilidad.Es una pieza muy interesante de software y le dirá un montón de detalles acerca de HFS+.Es gratis y os animo a descargarlo y probarlo.Ya no es compatible, pero todavía funciona en Snow Leopard y Leopard - básicamente cualquier HFS+ sistema compatible.Realmente no se puede hacer ningún daño con ella, ya que se trata de "sólo lectura" de la herramienta, por lo que es ideal para usar para mirar algunos detalles del sistema de ficheros.

Una cuestión más acerca de estos "enlaces duros a las carpetas" - una vez que se crea uno y el super-mágico super-secreto oculto de la carpeta que se crea, es para bien.Incluso si usted desvincular la carpeta que causó que se crea en primer lugar, esta magia de la carpeta permanece alrededor.No sé por qué, pero definitivamente lo hace.Usted puede utilizar "hfsdebug" para averiguar esto, si usted desea probar.También puede utilizar "hfsdebug" para averiguar cómo muchos de estos "enlaces duros a las carpetas" existen en una unidad.Para estos detalles se refieren a Amit del artículo sobre el "hfsdebug de utilidad".

Él también tiene otra más reciente de la utilidad que es compatible, pero cuesta.Se llama fileXray y un costo de $79 para una persona en cualquier número de equipos en la misma casa por un personal no comercial tipo de licencia.Dispone de una amplia 173-Guía del Usuario página que puede descargar para ver qué se puede hacer antes de comprar.Desafortunadamente, no hay versión de prueba, por lo que leer el manual y revise el sitio web para más detalles para ver si puede ayudarle a salir de un atasco.Aprender todos los detalles en su sitio web - ver fileXray sitio web para obtener más información.

Hay un par de aspectos que debe tener en cuenta al utilizar estos enlaces duros a las carpetas.Si el volumen que se crean en la que está montado a un cliente remoto, puede haber problemas significativos, dependiendo de cómo se montan.Si utiliza la AFP para montar el volumen a un cliente remoto, hay grandes problemas como cualquier carpeta que tiene en la actualidad un enlace duro a o ha tenido alguna vez uno, pero después se quita, no podrá ser utilizado como todos los de nivel inferior carpetas (pero no los archivos) no serán accesibles desde el Finder o en una ventana de Terminal.Si usted trata de hacer una simple "ls -lR" comando, va a fallar y dar "ls:xxx:No existe el fichero o directorio" mensajes de error para todos los niveles inferiores de las carpetas de nivel.Si utiliza una ventana de Finder para recorrer el árbol de directorios del volumen remoto, las carpetas que están en la carpeta que ha tenido o tiene un enlace duro a simplemente desaparecer sin ningún tipo de error al hacer clic sobre el nombre de la carpeta.

Estos problemas no parecen ocurrir (excepto para el mensaje de error) si utiliza NFS para montar el cliente remoto (y suponiendo que había un servidor NFS en el sistema que tiene el volumen como un local de sistemas de ficheros HFS+).Los detalles sobre cómo utilizar NFS para montar volúmenes no son proporcionados aquí.He utilizado un bonito programa del Dr.Marcel Bresink llamado "NFS Manager" para ayudar con los montajes de NFS en el servidor y el cliente.Usted puede obtener de su sitio web - sólo la búsqueda para "Bresink NFS Manager" en su motor de búsqueda favorito, pero tiene una versión de prueba gratuita para que usted puede probar antes de comprar.No es gran cosa si usted desea aprender cómo hacer los montajes de NFS, pero el "NFS Manager" hace que sea bastante fácil para preparar las cosas y ajustar los diferentes ajustes para ayudar a optimizar.Él tiene varios otros limpio Mac OS X utilidades que son un precio muy razonable - una que se llama "Hardware Monitor" que te permite controlar y gráfico de todo tipo de cosas como el uso de la energía, la temperatura de la CPU, la velocidad de los ventiladores y muchas otras variables para el local y remoto de los sistemas de Mac durante largos periodos de tiempo (de minutos a días).Definitivamente vale la pena visitar si usted está en la mano de utilidades.

Una cosa que me di cuenta es que los archivos NFS transferencias eran aproximadamente un 20% más lento que hacerlas a través de AFP, pero su "kilometraje puede variar", por lo que no hay garantías de una forma o de otra, pero preferiría tener algo que funciona incluso si tengo que pagar un 20% de rendimiento en comparación con tener el trabajo de nada en absoluto.

Apple es consciente de los problemas con los enlaces duros y remoto AFP sistemas de ficheros, y se refieren a él como un "implentation limitación" de la AFP cliente - yo prefiero llamarlo lo que realmente me parece - UN ERROR!!!Sólo espero que la próxima versión de Mac OS X corrige el problema, ya que me gusta tener la capacidad de usar los enlaces duros a las carpetas cuando tiene sentido.

Estas notas son mi opinión personal y no me hace ninguna garantía sobre su exactitud, así que utilice a su propio riesgo.Tener una buena copia de seguridad antes de jugar con estos "enlaces duros a las carpetas" en caso de que algo imprevisto sucede.Pero espero que se diviertan si no te decides a mirar un poco más en este interesante aspecto de Mac OS X.

Piffle.En 10.5, lo que nos dice en la página man de 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)

Así que sí:

    sudo  ln  -d  existing_dir  new_hard_link

Darle tu contraseña, y aún no ha terminado.No el documento, ¿y a ti?Usted debe documento duro directorios vinculados;incluso si se trata de un solo usuario de la máquina.

La eliminación es una historia diferente:si usted va sobre él de la manera usual para eliminar directorios, te voy a borrar el contenido.Así que debe "desvincular" el directorio:

    unlink  new_hard_link

No.Espero que no naufragio de su sistema de ficheros!

El Cross-posting esta gran herramienta que perfectamente se soluciona el problema, originalmente publicado por Sam:


Para instalar Hardlink, asegúrese de que ha instalado homebrew, a continuación, ejecute:

brew install hardlink-osx

Una vez instalado, crear un enlace duro con:

hln [source] [destination]

También me di cuenta de que unlink comando no funciona en snow leopard, así que he añadido una opción para desvincular:

hln -u destination

El código está disponible en Github para aquellos que estén interesados: https://github.com/selkhateeb/hardlink

Sí, es compatible con el kernel y el sistema de ficheros, pero ya no está pensada para el uso general no expuesta a la shell.

Usted probablemente podría averiguar qué Api de Tiempo de la Máquina usos y envolverlos en una herramienta de línea de comandos, pero sería mejor tomar la pista y dirigir bien claro.

La versión de OSX ln puede hacerlo, pero, como se mencionó en la otra respuesta por rica, es posible con la versión GNU de ln que está disponible en homebrew como gln como parte de la coreutils la leche de fórmula. man gln las listas de la -d opción con el OSX-advertencia específica proporcionada en rica's respuesta.En otras palabras, no funciona en todos los casos.Qué es exactamente determina si funciona o no, no parece ser documentado en ninguna parte.

Como requisito previo, instalar coreutils:

    brew install coreutils

Ahora usted puede hacer:

    sudo gln -d /original_folder /mirror_folder

IMPORTANTE:Para quitar el disco duro enlace debe uso gunlink:

    sudo gunlink /mirror_folder

El uso de rm o el Finder también eliminar la carpeta original.

FYI:El coreutils homebrew fórmula proporciona el GNU compatible con las versiones genéricas de unix herramientas.Uso brew list coreutils para ver la lista completa.

Mi caso fue que me enteré de que a partir de una máquina virtual de windows, no puedo seguir enlaces simbólicos.(quería poner a prueba algunas de las páginas HTML en Internet Explorer).Y mi estructura de directorios había enlaces simbólicos para el CSS y las imágenes de las carpetas.

Mi solución para resolver el problema fue un enfoque diferente de las otras respuestas implícitas.He utilizado rsync para crear una copia de la carpeta.Rsync puede resolver los enlaces y copiar los archivos vinculados en el lugar.

Esta solucionado mi problema sin el uso de enlaces duros a los directorios.Y en realidad es una solución fácil si sólo estás trabajando en un pequeño conjunto de archivos.

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

A partir de 2018, ya no es posible.PASF (introducido en MacOS Alta Sierra 10.13) no es compatible con directorio de enlaces permanentes.Ver https://github.com/selkhateeb/hardlink/issues/31

La respuesta corta es que no se puede.:) (excepto, posiblemente, como root, cuando sería más exacto decir que no debe.)

Unix, sólo permiten un número determinado de enlaces a directorios - ".." desde dentro de todos sus hijos y "." desde dentro de ella misma.Otra cosa es potencialmente una receta para un muy confundido árbol de directorios.Este es el/al parecer, fue una decisión de diseño por Ken Thompson.

(Dicho esto, al parecer Apple Time Machine hace esto :) )

Desde el artículo vinculado, recibirás ese error si intenta crear un enlace duro en el mismo directorio que el original.Usted tiene que crear en algún otro lugar.

Esto también se puede hacer con construido-en Perl (desde el Terminal) sin compilar nada.Mi caso de uso específico es para Google Drive (que no admite enlaces simbólicos), por lo que los ejemplos que a continuación se reflejan los casos de uso.

Para vincular tu carpeta "Documentos" a Google Drive, por lo que es sincronizado:

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

Para quitar el enlace a su carpeta "Documentos" de Google Drive:

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

Usted necesidad de "root" para desvincular (ver "desvincular" perldoc).

Otra solución es utilizar bindfs https://code.google.com/p/bindfs/ que es instalable a través del puerto:

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

en caso de que no haya sub carpeta, usted puede intentar

ln folder_path/*.* target_folder

a mí me funcionó en OSX 10.9

En Linux puedes usar bind de montaje para simular duro vinculación de los directorios.No estoy seguro acerca de OSX

sudo mount --bind /some/existing_real_contents /else/dummy_but_existing_directory
sudo umount /else/dummy_but_existing_directory
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top