0

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

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 ?

4

1 回答 1

0

看起来确实是个小虫子。似乎 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 端口始终具有正确的行为。这是我能找到的唯一可行的选择。

于 2021-01-07T16:45:12.963 回答