Closed5
Git BashでWSL2のVHDXのパスを取得したい
取り合えず動くもの
vhdx
#!/usr/bin/bash
set -e
function getPath() {
local cmd="(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { \$_.GetValue(\"DistributionName\") -eq '$1' }).GetValue(\"BasePath\") + \"\ext4.vhdx\""
path=$(powershell -c "$cmd")
echo "$1 ${path#\\\\\?\\}"
}
destros=$(wsl -l -q | tr -d "\0")
for d in $destros; do
getPath "$(echo ${d%%[\r\n]+})"
done
実行結果
$ vhdx
Ubuntu C:\Users\gn5r\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
docker-desktop-data C:\Users\gn5r\AppData\Local\Docker\wsl\data\ext4.vhdx
docker-desktop C:\Users\gn5r\AppData\Local\Docker\wsl\main\ext4.vhdx
Ubuntu-22.04 C:\Users\gn5r\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx
grepなんかもできる
$ vhdx | grep 'Ubuntu'
Ubuntu C:\Users\gn5r\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
Ubuntu-22.04 C:\Users\gn5r\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx
一応awkを使うことも考慮してある
$ vhdx | grep 'Ubuntu' | awk '{print $2}'
C:\Users\gn5r\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
C:\Users\gn5r\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx
解説
destros=$(wsl -l -q | tr -d "\0")
for d in $destros; do
getPath "$(echo ${d%%[\r\n]+})"
done
wsl -l -q
の結果にはWindowsの改行コードが含まれているため"$(echo ${d%%[\r\n]+})"
で消す必要がある
function getPath() {
local cmd="(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { \$_.GetValue(\"DistributionName\") -eq '$1' }).GetValue(\"BasePath\") + \"\ext4.vhdx\""
path=$(powershell -c "$cmd")
echo "$1 ${path#\\\\\?\\}"
}
docker-desktop-dataなどのvhdxのパスを取得すると以下のように先頭に\\?\
が付与されるのでそれを消している
\\?\C:\Users\gn5r\AppData\Local\Docker\wsl\data\ext4.vhdx
このスクラップは4ヶ月前にクローズされました