不足しているディレクトリを作成するには、 `ln`を使用します


10

だから私は小さなパッケージマネージャーを書いていて、私が遭遇した問題はファイルへのシンボリックリンクを作ることです。

パッケージをにインストールし/usr/pkg/name-version、ファイルを読み取って、作成するシンボリックリンクを決定します。lnリンクの作成に使用していますが、Linux APIヘッダーをインストールしようとすると問題が発生します。ヘッダーファイルをリンクする必要があります。ヘッダーファイルを含むフォルダーではなく、リンクする必要があります(したがって、2つのパッケージがインクルードの同じサブディレクトリにファイルを配置する必要がある場合、1つのパッケージをねじ込むことなくそれらを行うことができます)。

その問題は解決しましたがln、パスが不完全な場合は単にエラーが表示されます。これは、パッケージがインストールされるまでこれらのディレクトリが存在してはならないため、厄介です。

ln不足しているディレクトリを作成するフラグがありますか、それとも複雑なbashスクリプトを使用する必要がありますか?


1
私は明白なものを欠いているかもしれませんが、なぜあなたmkdirは...ディレクトリを作成するために使用していないのですか?
jw013

また、チェックアウトすることもできlndirます。
AMS

回答:


3

複雑なbashスクリプトは必要ありませんが、単純なワンライナーです。mkdir --parentsディレクトリ構造がすでに存在する場合は、エラーを出力することすらなく、すべてを処理します。

削除時にこれらのディレクトリをどのように扱うかに注意してください。そうすれば、他のパッケージを壊すことはありません。

また、で作成してbashいるので、ソーサリー(恥知らずなプラグイン)を見ることができます。多分それは成熟していて柔軟性があるので、単にそれを修正する方が簡単でしょう。


おっと、私はそれをc ++で記述していること、およびbashとsystem()呼び出しとのインターフェースが簡単であることを忘れていました。これは結局私がやったことです、ありがとう。
Chris

@Chris:system()は簡単ではありませんsystem()。コマンドライン引数をで適切にエスケープするのは非常に困難です。少なくとも、コマンドライン引数を配列として受け入れるposix_spawn()or を使用する必要fork()+exec*()があります。
ライライアン

4

でこれを行うためのフラグはありませんln。ディレクトリの作成はその仕事ではありません。

mkdir -p foo/bar/qux作成されfoofoo/barそしてfoo/bar/qux必要に応じて。したがってmkdir -p、最後のパスコンポーネントを除くすべてを最初に呼び出します。

内部のさまざまなパッケージのコンポーネントへのシンボリックリンクでディレクトリを必要な深さに作成することにより、ディレクトリ階層をマージする単純なパッケージマネージャーであるWheel Stowを再発明しているようです。あるいは、おそらくStowに似ていますが、より多くのカスタマイズの可能性があるXStowです。


0

多分tarリンクのあるファイルを準備するのに役立つでしょう:

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

次に、必要に応じてリンクを作成します。

tar xvf links.tar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.