【发布时间】:2019-09-22 10:14:25
【问题描述】:
我在 Win10/x64 下使用 cygwin64 bash。
我在复制一个简单目录(下面的../bin)时遇到问题,该目录仅包含 2 个文件,一个 Win10 可执行文件和对应的 Linux 可执行文件(相同的文件名,没有扩展名)。
$ ls ../bin
abc abc.exe*
$ cp -rf ../bin .
cp: cannot create regular file './bin/abc': File exists
$ ls bin
abc.exe*
为什么文件 abc 没有被复制!?
如果我在 ../bin 中将 abc.exe 重命名为 abcd.exe,则它可以工作,并且复制了 2 个文件。
如何告诉 bash/cp 不要将 abc 和 abc.exe 视为同一个文件?我尝试了各种 cp 选项(-f、-p、-H)都没有解决问题。
谢谢。
【问题讨论】:
-
无法复制。此外,这不是一个真正的编程问题。
-
这听起来像是 Cygwin 的一个特性。他们必须绕过这样一个事实,即 Windows 上的可执行文件必须具有
.exe扩展名,但 Unix 可执行文件通常没有扩展名。因此,带有.exe扩展名的文件和另一个具有相同名称但没有扩展名的文件被 Cygwin 视为同一个文件。首先将这两个文件放在bin目录中可能不是一个好主意,因为它只会混淆Cygwin。但如果你真的想复制,最简单的方法可能就是使用 Windows 资源管理器。 -
请注意,.exe 必须是真正的 Windows 可执行文件才能重现该问题。我使用 "ls > xyz; chmod a+x xyz" 在 ../bin "xyz" 和 "xyz.exe" 中创建了 2 个虚拟文件,然后没有出现问题。
-
@Graeme。是的,它必须是 cygwin,但我认为可能有办法改变这种行为?这是自动构建过程的一部分,因此无法手动复制。一种解决方法显然是重命名 ./bin 中的 .exe 文件以避免名称冲突,但我无法完全控制此构建过程...
-
也许做不同的文件夹?
bin、win32和win64什么的?