我正在寻找一种方法将Win32路径转换为POSIX路径,最好使用Win32工具。
背景:
最新的Windows 10 Insider Build推出了Linux子系统Linux(WSL),包括由Ubuntu背后的公司Canonical提供的本地bash
。他们对bash
的实现采用了相当复杂的Bash on Ubuntu on Windows名称,我将在下文中将其称为bash.exe
。
相当于访问C:\Users\me\Desktop
中的Windows路径bash.exe
/mnt/c/Users/me/Desktop
。
我正在尝试从Windows命令提示符(例如bash.exe
)传递路径bash -c ls /mnt/me/Desktop
。由于这需要我传递一个POSIX路径,我想知道Microsoft是否提供了任何工具来将Win32路径以编程方式转换为POSIX路径(如cygpath
在Cygwin中所做的那样。)
除非Windows附带任何翻译工具,否则我愿意接受确定路径的替代方案,例如:使用Node或Python。
答案 0 :(得分:2)
我在[0]写了一个小的shell脚本,这是一个开始,我希望随着时间的推移而改进。我想" sed"是一个很好的工具来做一些字符串替换。
这里的当前状态:
linuxify() {
windowspath=$1
temppath="$(echo $windowspath | sed -E 's/([A-Z]):/\/mnt\/\L\1/g')" # C: -> /mnt/c, E: -> /mnt/e
temppath="$(echo $temppath | sed 's/\\/\//g')" # backslash -> forward slash
linuxpath=$temppath
echo $linuxpath
}
然后你可以像这样使用它
cd "`linuxify "E:\Marvin Kastner\Documents\Uni\Master\gitrepos\masterarbeit_neu"`"
[0] https://gist.github.com/1kastner/723a52f352c3eead42988c26b4ade5d0
答案 1 :(得分:0)
事实证明,NodeJS有一个内置模块用于这种东西,称为path
。虽然它没有完全解决手头的问题,但它是一个有效的解决方法(对我来说)。只需require("path")
并决定块或一个班轮。
这是块:
var p = require("path")
var path = "C:\\Users\\me\\Desktop"
var sepa = path.split(p.win32.sep)
var newS = [].concat([sepa[0].toLowerCase()], sepa.slice(1))
var newP = "/mnt/" + p.posix.join.apply(p.posix, newS).replace(":", "")
// newP == "/mnt/c/Users/me/Desktop
作为一个班轮:
var p = require("path")
var d = "/mnt/" + p.posix.join.apply(p.posix, [].concat(["C:\\Users\\me\\Desktop".split(p.win32.sep)[0].toLowerCase()], "F:\\Users\\me\\Desktop".split(p.win32.sep).slice(1))).replace(":", "")
答案 2 :(得分:0)
您在Windows的Linux子系统中的Ubuntu位置的路径位于:
C:\Users\<user>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc