osx - sistemas - Copia de enlaces simbólicos en Mac OS X
sistemas operativos mac versiones (4)
¿Cuál es la forma más simple de copiar enlaces simbólicos en la Mac?
Sería preferible una solución python o perl, pero cualquier solución sería de ayuda.
Copio marcos para un paquete de instalación y necesito que se mantengan los enlaces
Como etiquetó a Python, supongo que quiere decir algo como copytree (src, dst [, symlinks]). Los enlaces simbólicos reales (creados por ln -s) se copiarán como en cualquier sistema Unix. Pero si crea un alias con el buscador, no obtendrá un enlace simbólico, sino un alias. MacOS ofrece dos tipos de enlaces: enlaces simbólicos y alias de tipo de Unix (consulte http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/Articles/Aliases.html ). Estos alias no son tratados como enlaces por muchas herramientas, ni copytree, como sé.
Como mencionó David, a OS X le falta la práctica, una opción que tiene gnu cp.
Sin embargo, si usa -R para hacer una copia recursiva, entonces copiará enlaces simbólicos por defecto, por lo que
cp -R source destination
debería funcionar
En python puede usar os.readlink y os.symlink para realizar esta acción. Debería verificar si lo que opera es en realidad un enlace simbólico con os.lstat y stat.S_ISLNK
import os, stat
if stat.S_ISLNK(os.lstat(''foo'').st_mode):
src = os.readlink(''source'')
os.symlink(src, ''destination'')
Podrías hacerlo con la opción -R de cp . Esto funciona porque cp de forma predeterminada no sigue los enlaces simbólicos, pero ladra al copiar no archivos sin especificar -R, lo que significa recursividad.
cp -R source destination
En python eso sería con el subproceso.llamado
from subprocess import call
call([''cp'', ''-R'', ''source'', ''destination''])
Tenga en cuenta que un alias macosx no es un enlace simbólico y, por lo tanto, el tratamiento específico del enlace simbólico fallará en él.
La solución de @brian d foy solía ser correcta. Las versiones más nuevas de macOS son compatibles
cp -a