我怎么能转换一个Windows目录路径(比如c:/libs/Qt-static
)为正确的POSIX目录路径( /c/libs/Qt-static
)通过标准MSYS特征来? 反之亦然?
Answer 1:
我不知道msys
,但快速谷歌搜索给我看,它包括sed
工具。 因此,假设它的工作原理类似于msys
比它在本地Linux,这里有一个方法如何做到这一点:
从Windows到POSIX
你必须用斜杠替换所有反斜杠的驱动器盘符后删除第一个冒号,并在开始添加斜线:
echo "/$pth" | sed 's/\\/\//g' | sed 's/://'
或者,如由xaizek指出的,
echo "/$pth" | sed -e 's/\\/\//g' -e 's/://'
从POSIX到Windows
你必须添加一个分号,删除第一个斜线和替换所有斜杠反斜杠:
echo "$pth" | sed 's/^\///' | sed 's/\//\\/g' | sed 's/^./\0:/'
或更有效,
echo "$pth" | sed -e 's/^\///' -e 's/\//\\/g' -e 's/^./\0:/'
其中$pth
是一个变量存储Windows或POSIX路径,分别。
Answer 2:
您是否使用它的cygwin? 如果是的话,那么有一个叫现成的工具cygpath.exe
只是这样做,在Cygwin包。
Output type options: -d, --dos print DOS (short) form of NAMEs (C:\PROGRA~1\) -m, --mixed like --windows, but with regular slashes (C:/WINNT) -M, --mode report on mode of file (binmode or textmode) -u, --unix (default) print Unix form of NAMEs (/cygdrive/c/winnt) -w, --windows print Windows form of NAMEs (C:\WINNT) -t, --type TYPE print TYPE form: 'dos', 'mixed', 'unix', or 'windows'
Answer 3:
下面是我的实现(上混帐bash的测试)。
从POSIX到Windows
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/
到/drive:/dir/
)是它并插入心脏:
所述前2
次/
。 我用,
为DELIM而不是/
的可读性。 如果在启动/
( \,^/,
然后替换/
带:/
为2
次发生。 我不想承担的1盘符长度,使这个工程/sd0/some/dir
。
s,^/,,
删除前导/
和s,/,\\,g
将所有/
到\
。
\,/$, !s,$,/,
是处理的边角情况下/c
,并确保第2 /
( /c/
)下一个命令工作。
注意:
如果此字符串<<<
不会在你的shell工作,那么你可以echo
和管道为
echo "$@" | sed ...
勘误表
这里Ë脚本
文章来源: Windows PATH to posix path conversion in bash