2016-06-28 62 views
3

我正在寻找一种方法将Win32路径转换为POSIX路径,最好使用Win32工具。如何为Linux Windows子系统转换Windows路径

背景

最新的Windows内幕构建介绍Windows子系统为Linux(WSL),包括由Canonical,公司Ubuntu背后提供的本地bash。他们对bash的执行过于相当复杂的名称Bash on Ubuntu on Windows,我将在下面将其称为bash.exe

访问bash.exe中的Windows路径C:\Users\me\Desktop的等效项为/mnt/c/Users/me/Desktop

我试图从Windows命令提示符(例如bash -c ls /mnt/me/Desktop)将路径传递到bash.exe。因为这需要我通过一个POSIX路径,所以我想知道微软是否提供了任何工具来将Win32路径以编程方式转换成POSIX路径(例如Cygwin中的cygpath

除非Windows附带任何翻译工具,否则打开替代品来确定路径,例如使用Node或Python。

+1

很显然,我被问什么,但也许我在线之间读取。对于任何将cygwin脚本移植到WSL的人来说,这最终都是有用的,理想情况下是以脚本或二进制的形式实现与cygpath类似的命令行参数。 – philwalk

回答

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(":", "") 
1

我在写一个小的shell脚本[0],这是一个开始,我想随着时间不断改进。我猜“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

+0

请不要只是发布一些工具或库作为答案。至少在答案中演示[它如何解决问题](http://meta.stackoverflow.com/a/251605)。 – paper1111

+0

我以同样的方式思考和编辑我的答案,即使没有看到您的评论和减评论。我之前点击答案按钮有点快。目前的答案是否仍然值得一个负号现在取决于你。 – mkastner

相关问题