mkdir 的 GnuWin32 端口中的错误?

问题描述

我似乎遇到了 GnuWin32 的 mkdir 的奇怪行为(来自 here):

C:\sandBox>"C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE" --verbose -p Q:/scratch/foo/bar
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `Q:/scratch'
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `Q:/scratch/foo'
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `Q:/scratch/foo/bar'

在上面,当前驱动器是C,目标驱动器是Q。 正如预期的那样,层次结构是在 Q:/scratch/foo/bar

中创建的

现在,几乎相同的示例,但当前驱动器和目标驱动器都是 C。

C:\sandBox>"C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE" --verbose -p C:/scratch/foo/bar
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `C:/scratch'
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `C:/scratch/foo'
C:\Program Files (x86)\GnuWin32\bin\mkdir.EXE: created directory `C:/scratch/foo/bar'

mkdir 的输出看起来正确且非常可预测。 但是,在 C:/scratch/foo/bar 处并没有真正创建任何内容。相反,目录层次结构是使用当前目录作为根创建的,即创建的是 C:/sandBox/scratch/foo/bar

谁能确认一下?这是一个错误吗? 如果我有时间,我会查看源代码,但是....

有谁知道比 5.3.0 更新的 CoreUtils 版本已经移植到 Win32 了吗?

解决方法

看起来确实是一个小错误。似乎 GnuWin32 的端口不喜欢驱动器号后面冒号后的正斜杠。使用反斜杠它与两者的行为都正确

C:\sandbox> mkdir --verbose -p Q:\scratch/foo/bar

C:\sandbox> mkdir --verbose -p C:\scratch/foo/bar

但是(据报道)当使用正斜杠时,它只能与

一起正确运行
C:\sandbox> mkdir --verbose -p Q:/scratch/foo/bar

在上面,注意目标与提示在不同的驱动器上)但不是

C:\sandbox> mkdir --verbose -p C:/scratch/foo/bar

在上面,注意目标和提示在同一个驱动器上

来自 UnxUtils 的真正古老的 mkdir 端口始终具有正确的行为。这是我能找到的唯一可行的替代方案。