使用 `ln` 创建丢失的目录

Chr*_*ris 10 bash symlink package-management ln

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

它将包安装到/usr/pkg/name-version,然后读取文件以确定要创建的符号链接。我正在ln用来制作链接,但在尝试安装 Linux API 标头时遇到了问题。我需要链接头文件本身,而不是包含它们的文件夹(所以如果 2 个包需要将文件放在 include 的同一个子目录中,他们可以在不搞砸一个包的情况下)。

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

是否有一个标志ln会创建任何丢失的目录,或者我将不得不使用一些复杂的 bash 脚本?

Gil*_*il' 8

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

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

听起来您正在重新发明轮子 Stow,一个简单的包管理器,它通过创建所需深度的目录以及内部不同包组件的符号链接来合并目录层次结构。或者也许是 XStow,它类似于 Stow 但具有更多定制可能性。


lyn*_*ynx 3

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

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

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