使用 ln 创建丢失的目录

使用 ln 创建丢失的目录

所以我正在编写一个小型包管理器,我遇到的一个问题是创建文件的符号链接。

它将包安装到/usr/pkg/name-version,然后读取文件以确定要创建哪些符号链接。我用来ln建立链接,并且在尝试安装 Linux API 标头时遇到了问题。我需要链接头文件本身,而不是包含它们的文件夹(因此,如果两个包需要将文件放在 include 的同一子目录中,则无需将其中一个包搞砸即可)。

我解决了这个问题,但ln如果路径不完整,就会出错,这很烦人,因为在安装包之前这些目录不应该存在。

是否有一个标志ln可以创建任何丢失的目录,或者我是否必须使用一些复杂的 bash 脚本?

答案1

没有标志可以执行此操作ln。创建目录不是它的工作。

mkdir -p foo/bar/qux将根据需要创建foofoo/bar和。foo/bar/qux因此,mkdir -p首先调用除最后一个路径组件之外的所有路径组件。

听起来你像是在重新发明轮子 斯托,一个简单的包管理器,它通过创建所需深度的目录来合并目录层次结构,并使用指向内部不同包的组件的符号链接。也许X斯托,这与 Stow 类似,但具有更多定制可能性。

答案2

您不需要复杂的 bash 脚本,而需要简单的一行代码。mkdir --parents将处理所有事情,如果目录结构已经存在,甚至不会打印错误。

只是在删除时要小心如何处理这些目录,这样就不会破坏其他包。

另外,既然你写的是bash,你可以看看巫术(无耻的插头)。也许修改它会更简单,因为它成熟且灵活。

答案3

也许tar可以帮助准备带有链接的文件:

find . -type l > links.txt
tar cpf links.tar --files-from links.txt

然后在需要的地方创建链接:

tar xvf links.tar

相关内容