Подтвердить что ты не робот

Копирование символических ссылок в Mac OS X

Каков самый простой способ копирования символических ссылок на Mac?

Было бы предпочтительным решение python или perl, но любое решение было бы полезным.

Я копирую фреймворки для установочного пакета и нуждаюсь в поддерживаемых ссылках

4b9b3361

Ответ 1

Как отметил Дэвид, OS X отсутствует удобный вариант -a, который имеет gnu cp.

Однако, если вы используете -R для рекурсивной копии, тогда она будет копировать символические ссылки по умолчанию, поэтому

cp -R source destination

должен работать.

Ответ 2

В python вы можете использовать os.readlink и os.symlink, чтобы выполнить это действие. Вы должны проверить, действительно ли то, что вы используете, на самом деле символическая ссылка с os.lstat и stat.S_ISLNK

import os, stat
if stat.S_ISLNK(os.lstat('foo').st_mode):
    src = os.readlink('source')
    os.symlink(src, 'destination')

Вы можете сделать это с помощью - R опции cp. Это работает, потому что cp по умолчанию не следует за символическими ссылками, но лает при копировании нефайлов без указания -R, что означает рекурсию.

cp -R source destination

В python, который будет с subprocess.call

from subprocess import call
call(['cp', '-R', 'source', 'destination'])

Обратите внимание, что a alias macosx не является символической ссылкой, и поэтому символическая ссылка на конкретное обращение не удастся на нем.

Ответ 3

Решение @brian d foy было правильным. Новые версии macOS поддерживают

cp -a

Ответ 4

Как вы отметили python, я предполагаю, что вы имеете в виду что-то вроде copytree (src, dst [, symlinks]). Реальные символические ссылки (созданные ln -s) будут скопированы как в любой системе unix. Но если вы создаете псевдоним с поисковым устройством, вы не получите символическую ссылку, а псевдоним. MacOS предлагает два типа ссылок: символические ссылки и псевдонимы типа unix (см. http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/Articles/Aliases.html). Эти псевдонимы не рассматриваются как ссылки по многим инструментам - ни копий, как я знаю.