我怎么能通过标准的msysfunction(如果不是失去了普遍性) Windows目录path(如c:/libs/Qt-static
)转换到正确的POSIX dirpath( /c/libs/Qt-static
) ? 反之亦然(特别是intrested)?
我不知道msys
,但一个快速的谷歌搜索显示,它包括sed
实用程序。 所以,假设它在msys
工作方式与在本地Linux上的工作方式类似, msys
是一种方法:
您将不得不用斜杠替换所有反斜杠,删除驱动器号后的第一个冒号,并在开头添加一个斜杠:
echo "/$pth" | sed 's/\\/\//g' | sed 's/://'
或者,如xaizek所述,
echo "/$pth" | sed -e 's/\\/\//g' -e 's/://'
您将不得不添加一个分号,删除第一个斜杠并用反斜杠替换所有的斜杠:
echo "$pth" | sed 's/^\///' | sed 's/\//\\/g' | sed 's/^./\0:/'
或更有效地,
echo "$pth" | sed -e 's/^\///' -e 's/\//\\/g' -e 's/^./\0:/'
其中$pth
是存储Windows或POSIX路径的变量。
你在cygwin上使用它吗? 如果是,那么在cygwin包中有一个名为cygpath.exe
的现成工具,只是为了做到这一点。
输出类型选项: -d,--dos打印DOS(简称)形式的NAME(C:\ PROGRA〜1 \) -m, - 像--windows混合,但用正则斜杠(C:/ WINNT) -M, - 模式文件模式(binmode或textmode) -u,--unix(默认)打印NAME的Unix形式(/ cygdrive / c / winnt) -w,--windows打印Windows窗体的名称(C:\ WINNT) -t,--type TYPE print TYPE形式:'dos','mixed','unix'或'windows'
这是我的实现(在git bash上测试)。
sed ' \,/$, !s,$,/, \,^/, s,/,:/,2 s,^/,, s,/,\\,g ' <<< "$@"
效劳于:
/c/git relative/dir c:/git ~ . .. /c /c/ ./relative/dir /sd0/some/dir/
除
/ <path with space>
说明:
\,^/, s,/,:/,2
(转换/drive/dir/
to /drive:/dir/
)是它的核心,并在第二个/
之前插入。 为了可读性,
我使用delim来代替/
。 如果以/
( \,^/,
)开头,则用/
替换:/
为第二个出现。 我不想假定驱动器字母长度为1,所以这适用于/sd0/some/dir
。
s,^/,,
删除前面的/
和s,/,\\,g
将all /
转换为\
。
\,/$, !s,$,/,
是处理/c
的转角情况,并确保第二个/
( /c/
)为下一个命令工作。
注意:
如果这里string <<<
在你的shell中不起作用,那么你可以echo
和pipe as
echo "$@" | sed ...
勘误表
这里是脚本