
Как скопировать папку, содержащую символические ссылки, и сохранить символические ссылки в папке назначения? Я делаю что-то вроде этого с помощью PHP/Bash:
system("cp -r production-clone-target production-sites/{$instanceName}");
но символические ссылки не отображаются в папке назначения.
решение1
Попробуйте добавить --preserve=links
переключатель в свою cp
команду.
От man cp
:
--preserve[=ATTR_LIST]
preserve the specified attributes (default: mode,ownership,timestamps),
if possible additional attributes: context, links,xattr, all
Редактировать: Если вы работаете в OS X, используйте cp -a
.
решение2
Вы также можете использовать rsync:
-l, --links copy symlinks as symlinks
Мне нравится -a
, который также включает этот, чтобы копировать также подкаталоги и т. д.
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Итак, в вашем примере кода вы могли бы сделать это:
system("rsync -a production-clone-target production-sites/{$instanceName}");
решение3
Оставив в стороне обоснованные опасения по поводу использования system()
в вашей PHP-программе:
cp
может и не иметь стандартизированных опций для этого, которые являются общими для Linux и BSD, но pax
они есть.
( cd источник && pax -pp -r -w * назначение/ )