web-dev-qa-db-ja.com

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

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

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

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

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

10
Chris

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

他のパッケージを壊さないように、削除時にこれらのディレクトリをどのように扱うかに注意してください。

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

3
lynxlynxlynx

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

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

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

たぶんtarはリンクを含むファイルを準備するのに役立ちます:

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

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

tar xvf links.tar
0
Vladimir Botka