Windows路径,以在bash POSIX路径转换(Windows PATH to posix p

2019-07-04 11:43发布

我怎么能转换一个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