我构建了一个库,我想使用coreutils /usr/local/lib
将库安装到install
。构建的结果如下:
libfoo.so -> libfoo.so.1
libfoo.so.1 -> libfoo.so.1.1
libfoo.so.1.1
我想保留install
的符号链接和/usr/local/lib
文件。但是,如果我跑
install libfoo* /usr/local/lib
解析符号链接,/usr/local/lib
如下所示:
libfoo.so
libfoo.so.1
libfoo.so.1.1
换句话说,这些都是真实文件,没有符号链接。
install
的联机帮助页不包含有关解析符号链接的任何信息。我怎样才能install
符号链接?
答案 0 :(得分:2)
我也想知道这件事。在looking at the source code之后,install
似乎非常积极地在安装时解析链接。以下是它传递给cp
的一些默认值;相关的不会在以后被覆盖。
cp_option_init (struct cp_options *x)
{
cp_options_default (x);
x->copy_as_regular = true;
x->reflink_mode = REFLINK_NEVER;
x->dereference = DEREF_ALWAYS;
x->hard_link = false;
x->preserve_links = false;
x->preserve_mode = false;
x->symbolic_link = false;
(...)
解决方法是使用cp
+ chmod
。
答案 1 :(得分:0)
请注意,install
实用程序始终会取消引用符号链接。
请参阅我的问题here。
要在保留所有内容(符号链接,硬链接,模式等)的同时复制文件,可以使用cp -a
您也可以使用tar:
tar c -C source_dir file1 ... fileN | tar xv -C dest_dir
请注意,cp -a
和tar
都将保留用户和组,并且这些文件可能必须在目标位置由root:root拥有。之后,您可能需要添加一个chown。