@namn1125 (namnium)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

WSL2にてWindows上でまともに使えるシンボリックリンクを作成したい

検証環境

  • WSL: WSL2 Ubuntu 20.04.1 LTS (Focal Fossa)
  • Windows: Windows 10 Pro Version 2004

本題

WSLから bash で普通にシンボリックリンクを作成すると、WSLからしか使用することができないシンボリックリンクができるかと思います。私はデスクトップを作業場として使うことが多いのですが、これだととても不便です。

bash
$ ln -s /mnt/c/Users/ユーザ名/Documents/ .

WSLのシンボリックリンクはWindows上のシンボリックリンクとはみなされない

逆にWindowsのショートカットはWSL上では認識されません。そこで Windowsの シンボリックリンクを作成するスクリプトを組み、それをWSL2から使用することにしました。

lnk
#!/bin/bash

target=$1
dir=`pwd`

name=$(basename $target)
dir=$(echo $dir | xargs wslpath -w)
target=$(echo $target | xargs wslpath -w)

command="'-command \"cd \\\"$dir\\\";New-Item -Value \\\"$target\\\" -Name \\\"$name\\\" -Item SymbolicLink\"'"
# echo "powershell.exe -command start-process powershell -verb runas $command"
powershell.exe -command start-process powershell -verb runas $command

実行例

bash
$ lnk /mnt/c/Users/ユーザ名/Documents/

これでカレントディレクトリ1Documents というシンボリックリンクが貼れます。

スクリーンショット 2020-09-17 063742.png

質問

私は検索力がないので発見できなかったのですが、このようなコマンドはすでにWSL2にあったりしますか?もし存在するならばわざわざ自作コマンドを使用する意味はないので教えていただければと思います。よろしくお願いいたします。


  1. カレントディレクトリのみにしたのはオリジナルの ln コマンドのようにしようとすると実装が大変そうであったのと、そのほうがシンプルでよいと考えたためです。 

2 likes

1Answer

Comments

  1. @namn1125

    Questioner

    回答ありがとうございます。m(_ _)m

    ファイルの場合は `ln -P` でWindowsからもWSLからも使えるハードリンクが作成できましたが、ディレクトリの場合はシンボリックリンクを挟んでもうまくいきませんでした。。

    何かやり方があるのでしょうか?
  2. powershellでされていたような`wslpath`っぽいのを
    ln に噛ませる必要がありそうですね。
  3. @namn1125

    Questioner

    申し訳ありません、まだよくわかっていないのですが、 `ln -P リンク元 登録名` はWSLから実行するものですか?それともpowershellから行うものですか?

    また、リンク元はWindows側で作られたフォルダ/ファイルでしょうか?それともWSL側で作られたディレクトリ/ファイルでしょうか?
  4. 説明不足でした。

    `ln -P` のはlinuxで実行してください。

    windowsではpowershellで作られたので良いと思います。

    linux側では通常以下のようにしているところを
    ln -s Documents /mnt/c/Users/ユーザー名/Desktop/Documents
    以下のように

    export WSLPATH="なんかここにいい感じにセットする"
    lnk() { ln -s "${WSLPATH}${1}" "$2" }

    使い方
    lnk -s ${WSLPATH}/Documents /mnt/c/Users/ユーザー名/Desktop/Documents

    というので作ると良いと思います。
  5. (自分がやる場合は面倒なのでsambaかonedriveのクライアント使うと思います。)
  6. @namn1125

    Questioner

    WSLならば `ln -P` はハードリンクを作成するコマンドということなのだと思いますが、そもそもディレクトリのハードリンクというのは作成可能なのでしょうか...?(いろいろ動かした限りうまくいきませんでした)

    何度もすみません。
  7. あら、ファイルシステムが異なるからかハードリンク無理だったのですね。
    ご連絡ありがとうございます👍🏻⭐️

Your answer might help someone💌