使用ln创建丢失的目录


10

因此,我正在编写一个小型程序包管理器,遇到的一个问题是建立文件的符号链接。

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

我解决了那个问题,但是 ln只是错误地指出了路径是否不完整,这很烦人,因为在安装软件包之前,这些目录不应该存在。

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


1
我可能会遗漏一些显而易见的东西,但是为什么不习惯于mkdir...制作目录呢?
jw013 2012年

您可能还想签出lndir
2012年

Answers:


3

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

请小心删除时如何对待这些目录,以免破坏其他软件包。

另外,由于您使用编写它bash,因此可以看一下魔术(无耻的插头)。修改它可能会更简单,因为它既成熟又灵活。


糟糕,我忘了提到我用c ++编写它,并且使bash与system()调用接口,因为它更容易。这是我最终要做的,谢谢。
克里斯

@Chris:system()并不容易,很难使用正确地转义命令行参数system()。至少应使用posix_spawn()fork()+exec*(),它接受命令行参数作为数组。
Lie Ryan

4

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

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

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


0

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

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

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

tar xvf links.tar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.