2つのパス間の相対リンクを取得する

2つのパス間の相対リンクを取得する

<source_path>との2つのパスがあるとしましょう<target_path>。私のシェル(zsh)が相対パスで<target_path>表すことができる方法があるかどうかを自動的に把握したいと思います。<source_path>

例えば、

  • <source_path>はい/foo/bar/something
  • <target_path>はい/foo/hello/world

結果は次のとおりです。../../hello/world

なぜこれが必要ですか?

以下を使用して<source_path>シンボリックリンクを作成する必要があります。<target_path>比較的可能であれば、シンボリックリンクを使用してください。そうしないと、Windowsがネットワーク上のこれらのファイルにアクセスすると、Sambaサーバーはファイルを正しく表示しません。 (私はシステム管理者ではなく、この設定を制御できません。)

<target_path>とが絶対パスであると仮定すると、<source_path>次はシンボリックリンクを生成します。絶対パスを指す

ln -s <target_path> <source_path>

だからそれは私のニーズを満たしていません。何百ものファイルに対してこれを行う必要があるため、手動で変更することはできません。

これを処理できるシェル組み込み機能はありますか?

ベストアンサー1

試してみてくださいrealpath注文する(GNUの一部coreutils>=8.23)、例えば:

realpath --relative-to=/foo/bar/something /foo/hello/world

brew install coreutilsmacOSを使用している場合は、次のようにGNUバージョンをインストールしてくださいgrealpath

コマンドが成功するには、両方のパスが存在する必要があります。相対パスが必要であっても、いずれかが存在しなくても -m スイッチを追加します。

より多くの例については、以下を参照してください。現在のディレクトリが与えられると、絶対パスを相対パスに変換します。

おすすめ記事