Копирование символических ссылок в Mac OS X - PullRequest
29 голосов
/ 21 октября 2008

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

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

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

Ответы [ 4 ]

38 голосов
/ 21 октября 2008

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

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

cp -R source destination

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

3 голосов
/ 26 февраля 2017

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

cp -a
3 голосов
/ 21 октября 2008

В 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 это будет с подпроцессом . Вызов

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

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

0 голосов
/ 21 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...