そこで私は小さなパッケージ マネージャーを作成しているのですが、ファイルへのシンボリック リンクを作成するときに問題が発生しました。
パッケージを にインストールし/usr/pkg/name-version
、次にファイルを読み取り、作成するシンボリック リンクを決定します。 を使用してln
リンクを作成していますが、Linux API ヘッダーをインストールしようとしたときに問題が発生しました。ヘッダー ファイル自体をリンクする必要があり、ヘッダー ファイルを含むフォルダーをリンクする必要はありません (そのため、2 つのパッケージが include の同じサブディレクトリにファイルを配置する必要がある場合、1 つのパッケージを台無しにすることなく実行できます)。
その問題は解決しましたが、ln
パスが不完全な場合は単にエラーが発生します。パッケージがインストールされるまでこれらのディレクトリは存在しないはずなので、これは厄介です。
不足しているディレクトリを作成するためのフラグはありますかln
、それとも複雑な bash スクリプトを使用する必要がありますか?
答え1
これを行うためのフラグはありませんln
。ディレクトリを作成するのは の役割ではありません。
mkdir -p foo/bar/qux
は必要に応じてfoo
、foo/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