WindowsのファイルパスをWSL(Linux環境)で使える形式に変換する方法

CTF

結論

  1. Windows → WSL:wslpath 'C:\path\to\file'
  2. PowerShell経由で:wsl wslpath "'C:\path\to\file'"
  3. WSL → Windows:wslpath -w '/mnt/c/path/to/file'
  4. PowerShell経由で:wsl wslpath -w /mnt/c/path/to/file
  5. 辞書: -u, -w, -a, -m オプションの意味
  6. WSL環境で使える .bashrc のショートカット関数:例 wincd() { cd "$(wslpath "$1")"; }

概要:なぜ変換が必要か?

Windowsではパス区切りに \(バックスラッシュ)、ドライブ名に C:\... の形式を使います。一方、WSL(Ubuntuなど)では /mnt/c/... にマウントされ、区切り文字は /(スラッシュ)。そのままでは使えないため、変換が必要です。

基本的な使い方:WSL上での変換

WSLのbash(Linux)環境で、

wslpath 'C:\Windows\Media'

と入力すると以下のように変換されます:

/mnt/c/Windows/Media

これは、Windows形式のパスをLinux形式に変換する -u がデフォルト動作(Windows → WSL)だからです。(turn0search11)


PowerShellからも使える

PowerShellでは、次のように wsl コマンドを付けて呼び出します:

wsl wslpath "'C:\Windows\Media'"

返り値:

/mnt/c/Windows/Media

シングルクオート内のバックパスを適切にエスケープすることで確実に変換できます。


逆方向の変換(WSL→Windowsパス)

WSL(bash)側:

wslpath -w '/mnt/c/Windows/Media'

C:\Windows\Media

PowerShell側:

wsl wslpath -w /mnt/c/Windows/Media

C:\Windows\Media

オプション解説(マニュアルより)

  • -u:Windows → WSL(デフォルト)
  • -w:WSL → Windows
  • -a:絶対パスを強制
  • -m:Windows 形式で / を使う形式

補足:PowerShellでの引用とエスケープ問題

PowerShellでは、バックスラッシュ \ は文字列では特別扱いされない場合が多いですが、正しく渡すにはエスケープを意識する必要があります

  • 失敗例(エスケープされず動作しない) wsl wslpath 'C:\Windows\Media'
  • 成功例 wsl wslpath 'C:\\Windows\\Media' wsl wslpath "'C:\Windows\Media'" wsl wslpath '"C:\Windows\Media"'

このように、正しくクオートやエスケープして渡すと安心して変換できます。

コメント

タイトルとURLをコピーしました