我正在尝试从上游源代码(不是我的)制作一个 debian 包。configure
作者提供的脚本在源目录中创建了很多符号链接。它们是src
指向子目录中所有标题的符号链接include
(这样 makefile 就可以include
在安装开发包的情况下轻松复制目录)。我正在使用debhelper
脚本来制作包。
我正在使用debhelper
脚本制作软件包。问题是使用新的 Debian 软件包格式 ( quilt 3.0 native
),debuild
拒绝将包含符号链接的源目录更改添加到最终diff
文件。我收到如下错误:
dpkg-source: error: cannot represent change to foo.h:
dpkg-source: error: new version is symlink to /ba/foo/foo.h
dpkg-source: error: old version is nonexistent
我知道一个好的解决方案:更改配置脚本,使其根本不对任何标头进行符号链接。它应该添加一个目标来makefile
安装devel
包。虽然配置脚本存在版权问题。我不能接触上游源代码。
我正在寻找一个 bash 脚本,用于将目录中的所有符号链接替换为它们指向的实际文件。例如,如果目录中d
有三个文件a
和b
和c
,它们将符号链接指向../../foo/bar/x
,,../../foo/bar/z
../../foo/bar/y
运行所需的脚本(例如magic.sh
),给出./d
作为第一个参数,应该
cp ../../foo/bar/x ./d/a
cp ../../foo/bar/y ./d/b
cp ../../foo/bar/z ./d/c
我找不到方法来知道符号链接指向哪个文件。
答案1
使用readlink
。
$ readlink /etc/alternatives/editor
/usr/bin/vim.basic
并将其包装在一个 shell 脚本中,遍历目录中的符号链接。
您可以使用以下方法查找符号链接find
:
$ find . -type l
更完整的例子:
#!/bin/bash
find . -maxdepth 1 -type l | while read LINE; do
echo link: $LINE resolved: `readlink $LINE`
done
输出
link: ./.remmina resolved: sparkleshare-homedir/remmina
link: ./project resolved: Documents/2011-2 Project/
link: ./.ssh resolved: sparkleshare-homedir/ssh